我有一个用C/C++编写的服务器.我为连接设置了包装器,如下所示:
//START WRAPPER
void Server::init_address(int port)
{
memset(&(this->serv_addr), 0, sizeof(this->serv_addr));
this->serv_addr.sin_family = AF_INET;
this->serv_addr.sin_port = htons(port);
this->serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
}
int Server::w_socket()
{
int retv;
retv = socket(PF_INET, SOCK_STREAM, 0);
//FIXME
//fcntl(retv, F_SETFL, O_NONBLOCK);
if(retv == -1)
{
std::string err_msg(strerror(errno));
err_msg = "[socket] " + err_msg;
throw err_msg;
}
else
{
int reuse_opt = 1;
if(setsockopt(retv, SOL_SOCKET, SO_REUSEADDR, &reuse_opt, sizeof(int))==-1)
{
perror("setsockopt error");
exit(1);
}
return retv;
}
}
void Server::w_bind()
{
int retv;
retv = bind(this->sock_fd,
(struct sockaddr*) &(this->serv_addr), …Run Code Online (Sandbox Code Playgroud) 我对Prolog中的列表列表有疑问.例如,我有这些事实:
fact(1, 'hello').
fact(2, 'boy').
fact(3, 'hello').
fact(4, 'girl').
Run Code Online (Sandbox Code Playgroud)
以及由(Character,Id)这样的对组成的列表:
list([b, 1, b, 2, g, 3, g, 4]).
Run Code Online (Sandbox Code Playgroud)
我的目标是返回这样的列表列表:
newList(['hello', boy'], ['hello', 'girl']).
Run Code Online (Sandbox Code Playgroud)
编辑:第一个列表必须分成更多共享相同字符的列表
list([b, 1, b, 2], [g, 3, g, 4]).
Run Code Online (Sandbox Code Playgroud)
那么,应该删除角色
list([1, 2], [3, 4]).
Run Code Online (Sandbox Code Playgroud)
并用相应的原子替换id,如下所示:
list(['hello', 'boy'], ['hello', 'girl']).
Run Code Online (Sandbox Code Playgroud) 我更改密码或更新用户信息时遇到此错误.我尝试了很多彼此相似的代码,但我仍然遇到了错误.这个问题可能是一个糟糕的CN定义,但在我的情况下应该是正确的,我真的很难过,因为我无法面对这个问题.
这是一个简单的代码,我尝试更新用户的信息(描述),但没有成功.用户"蝙蝠侠"显然存在于AD中.
public class ADConnection {
DirContext ctx = null;
String baseName = ",OU=SoftwareV3,OU=SOFTWARE,DC=SOFTWAREDEV,DC=LOCAL";
String serverIP = "192.168.10.45";
boolean ssl = true;
public ADConnection() {
try {
Hashtable ldapEnv = new Hashtable();
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
if(ssl==true)
{
ldapEnv.put(Context.PROVIDER_URL, "ldaps://192.168.10.45:636/dc=softwaredev,dc=local");
ldapEnv.put(Context.SECURITY_PROTOCOL, "ssl");
}
else
{
ldapEnv.put(Context.PROVIDER_URL, "ldap://192.168.10.45:389/dc=softwaredev,dc=local");
}
ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
ldapEnv.put(Context.SECURITY_PRINCIPAL, new String("softwaredev" + "\\" + "superadmin"));
ldapEnv.put(Context.SECURITY_CREDENTIALS, "passw0rd");
ctx = new InitialDirContext(ldapEnv);
}
catch (Exception e) …Run Code Online (Sandbox Code Playgroud) 我写了这个简单的函数:
private String getOperatorForCardinality(String op)
{
String operator ="";
if(op!=null)
{
if(op.equals(">="))
{
operator = ">=";
}
else if (op.equals("<="))
{
operator = "<=";
}
}
else
{
operator = "empty";
}
return operator;
}
Run Code Online (Sandbox Code Playgroud)
它返回一个字符串。
在主程序中我调用这个函数,当参数为null时,编译器显示NullPointerException错误。原因很清楚,但我不知道如何处理参数传递时的空值。