1. AcceptEx接受数据,这个函数必须受到数据才反回, 如果我的C端用WSAConnect连接,在lpCallerData 里放登陆数据, 不知AcceptEx可否接受数据,立即返回?
2.我用connect连接服务端, 成功,然后发送登陆数据
struct load_info
{
char flag[5]; // strcpy(flag, "LOAD");
CString name; // name = "name"
CString password; // password = "password"
}
send(server, (char*)&load_info, sizeof(load_info), 0);
接受端(服务端用AcceptEx接受数据)
char buf[500];
strcpy(buf, lpIoData->wsabuf.buf); // buf中只有"LOAD", 没有name, password
BOOL nRet = strcmp(buf, "LOAD");
if (nRet == 0)
{
LOAD_INFO load_info ;
memcpy(&load_info, buf, sizeof(load_info));
}
但是, load_info中只是flag中有"LOAD"信息,name及password均为空.
请问问题出在哪里?
2.我用connect连接服务端, 成功,然后发送登陆数据
struct load_info
{
char flag[5]; // strcpy(flag, "LOAD");
CString name; // name = "name"
CString password; // password = "password"
}
send(server, (char*)&load_info, sizeof(load_info), 0);
接受端(服务端用AcceptEx接受数据)
char buf[500];
strcpy(buf, lpIoData->wsabuf.buf); // buf中只有"LOAD", 没有name, password
BOOL nRet = strcmp(buf, "LOAD");
if (nRet == 0)
{
LOAD_INFO load_info ;
memcpy(&load_info, buf, sizeof(load_info));
}
但是, load_info中只是flag中有"LOAD"信息,name及password均为空.
请问问题出在哪里?
长度不正确
{
char flag[5]; // strcpy(flag, "LOAD");
char name[10]; // strcpy(name , "name");
char password[10]; // strcpy(password, "password");
}
send(server, (char*)&load_info, sizeof(load_info), 0);
我该成这样还是只能收到flag中的"LOAD"信息,name及password均为空.
-------------------------------------------------
不能用strcpy,因为,他用碰到'\0'结尾,
其实后面还有name和password
应用memcpy正确的方法是,在发送前,先发送你要发送的buff的长度.
接收的时候,根据这个长度memcpy