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均为空.  
请问问题出在哪里?

解决方案 »

  1.   

    send(server,  (char*)&load_info,  sizeof(load_info),  0);  错
    长度不正确
      

  2.   

    struct  load_info  
    {  
         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均为空.
      

  3.   

    memcpy(&load_info, pIo_data->wsabuf.buf, sizeof(load_info));
      

  4.   

    strcpy(buf,  lpIoData->wsabuf.buf);  // buf中只有"LOAD", 没有name, 
    -------------------------------------------------
    不能用strcpy,因为,他用碰到'\0'结尾,
    其实后面还有name和password
    应用memcpy正确的方法是,在发送前,先发送你要发送的buff的长度.
    接收的时候,根据这个长度memcpy
      

  5.   

    那是因为你发的是"CString"对象,CLIENT的对象怎么能够发到S上去呢?要改成char []