tcp/ip socket通信。typedef struct _tag_MyPack
{
DWORD len;
char *pdata;
}发送方先发len,四个字节,再发pdata指向的数据。接收方先读入四个字节,然后转换为DWORD,再根据这个长度读入其后的数据。通信开始是正确的,但是一段时间后会出错,我用sniffer工具查看了,出错是因为接收的数据与发送的数据根本不相符。
发送时的数据:00CC000400030001
接收得到数据:A600B7C600BFD600我觉得很奇怪,接收方和发送方都是windows2000操作系统,究竟是怎么回事呢?多谢多谢!

解决方案 »

  1.   

    首先,你这个结构体定义得有问题
    typedef struct _tag_MyPack
    {
    DWORD len;
    char *pdata;
    }
    应该定义成:
    typedef struct _tag_MyPack
    {
    DWORD len;
    char pdata[1];
    // 后面是data...
    }
    分配好空间,然后将你要发送的数据拷入pdata这个数组便可。
      

  2.   

    在确定你定义好数据结构以1字节对齐,看下面这个情况可能出现在你连续大量的收发数据的时候,我想tcp在收发数据的时候,可能一次发送多个数据包,所以在收包的时候要判断,是否收完所有数据,不然,丢了一些数据,那么下面的数据自然是不对。
      

  3.   

    在确定你定义好数据结构以1字节对齐,看下面这个情况可能出现在你连续大量的收发数据的时候,我想tcp在收发数据的时候,可能一次发送多个数据包,所以在收包的时候要判断,是否收完所有数据,不然,丢了一些数据,那么下面的数据自然是不对。
      

  4.   

    多谢各位,问题已经解决,犯了低级错误,sigh多谢多谢大家!