各位大侠,我用套接字发送一个结构体,如下:
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(bi的任一成员),则服务器方完全正常!
客户机发送套接字: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的各个位是出现乱码!

解决方案 »

  1.   

    你不能假定一次send和recv能完整发送、接收你要求的那么多字节!你至少该检查一下你发送了多少字节,接收了多少字节
      

  2.   

    如果对效率要求不高,服务器可用一个buff去接收,然后按照结构体的定义,buff的前10个字节memcpy给name,11到12个字节memcpy给sex,以此类推
      

  3.   

    socket设计时就这么规定的!你需要检查返回值,如果长度不足,需要再次接收,直到收全
      

  4.   

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

  5.   

    还有  你接收的那个缓冲区要初始化
    比如 char RecvBuf[1024]={0};
      

  6.   

    1.数据太多发送不了的,要不在数据结构体头里面加一个数据包大小的标识,判断他是否和接受的实际数据包大小一致,不一致继续收包,再把包拼接起来。
    2.主意下面的问题:
    对象初始化
    BasicInformation bi;
    memset(&bi,0,sizeof(BasicInformation));
    ret=recv(client,&bi,sizeof(BasicInformation),0);
    3.指针初始化:
    char* buf;
    buf=NULL;