我正在创建基本的ldap服务器作为学校项目。我将ldap消息发送到客户端(bindResponse,searchResEntry,searchResDone)为vector<char> searchResDone;
声明:
vector<char> searchResDone = {0x30, 0x0c, 0x02, 0x01, 0x02, 0x65, 0x07, 0x0a, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00};
功能:
void sendResponse(int newsock, char response[], int msg_size){
int i = write(newsock,response,msg_size);// send message to the client
if (i == -1){ // check if data was successfully sent out
err(1,"write() failed.");
}
else if (i != msg_size){
err(1,"write(): buffer written partially");
}
}
拨打:
sendResponse(newsock,reinterpret_cast<char*>(searchResDone.data()), searchResDone.size());
问题:
我正在从客户端分解searchRequest,然后将其分析并构建为
vector<string> response;
我不知道的是将回复发送为vector<string>
(vector<string> vcStr; vcStr[0] is for example 0x30
)而且我无法将其转换为vector<char>
..我只管理将一个字符串从vector转换为char数组为{0,x,3,0,...}但我需要一个十六进制数字作为一个char,因为你可以看到更高。
我试图自己解决这个问题但我没有想法。
更新
客户要求邮件mail=my.mail@mail.com
的用户名称
我已经按照相同的顺序(name[1],login[1],mail[1]
)将姓名,登录信息,邮件解析为vector<string>
,因此我会收到mail=my.mail@mail.com
我在循环vector<string> mail
时使用正则表达式,然后我知道mail[1]
是否匹配,我可以从name[1]
取名...然后我会将name[1]
转换为{}十六进制数字,我需要将它存储在某个数组{0x30, 0x0c,..}
中,将相同类型的数组组合在一起,并将其作为一个大数组{0x30, 0x0c,..}
答案 0 :(得分:1)
到目前为止最简单的解决方案是在sendResponse
中的每个string
重复调用vector<string>
。目标是一个套接字,几乎可以肯定它是一个流(而不是消息)套接字。流套接字的另一端无法查看您调用sendResponse
的频率;他们只看到一个字节流。