各位大侠,我用套接字发送一个结构体,如下:
struct BasicInformation
{
char name[10];
char sex[2];
char year[5];
char month[3];
char day[3];
char password[8];
char zipcode[10];
char qq[10];
char phone[12];
char noPublic[2];
char photo[3];
char email[20];
};
BasicInformation bi;
........///给bi的各个成员赋值
///////////////////////////////////////如果要此处调用MessageBox(),则服务器方接收完全正常!
客户机发送套接字:send(client,(char *)&bi,sizeof(BasicInformation),0);服务器接收结构体:
  char* buf;
buf=new char[sizeof(BasicInformation)];
ret=recv(client,buf,sizeof(BasicInformation),0);
bi=(BasicInformation*)buf;
在服务器端输出bi的各个位是出现乱码!经过观察,我发现客户机的数据全部发送出去了,但服务器却接收不到全部的数据,这是为什么啊?应该怎样做,才能保证服务器能接收全部的数据!还有,在客户机发送数据前面,调用MessageBox(),则服务器方能够接收全部的数据!好奇怪!

解决方案 »

  1.   

    接收时定义的结构在调用receive函数是一定要先清空试试下面的方法:
    BasicInformation bi;
    memset(&bi,0,sizeof(BasicInformation));
    ret=recv(client,&bi,sizeof(BasicInformation),0);
      

  2.   

    1:你要清空你接收数据的缓冲区,也就是memset下buffer
    2:你要是知道自己接收的数据的长度,就不用加包头了,你循环接收就可以了,一直到总的数据长度等于你已知的长度。
      

  3.   

    1:你要清空你接收数据的缓冲区,也就是memset下buffer
    2:你要是知道自己接收的数据的长度,就不用加包头了,你循环接收就可以了,一直到总的数据长度等于你已知的长度。