struct FILEINFO
{
    ULONGLONG FileLen;//8080
    char FileName[100];//"win.rar"
    char ask[44];   //"I can play"
};char recvBuf[1024];
memset(recvBuf,0,1024);
retval=recvfrom(m_DataSocket,recvBuf,1024,0,(SOCKADDR*)&addrFrom,&len);
sendto(m_FileSendSocket,(char *)&g_FileInfo,sizeof(FILEINFO),0,(LPSOCKADDR)&addrTo,sizeof(SOCKADDR));
为什么接受的时候数据不正确呢?如果岸上面的结构体发送接受到"?"结构体里面的成员换个位置:
struct FILEINFO
{
   // ULONGLONG FileLen;//8080
    char FileName[100];//"win.rar"
    char ask[44];   //"I can play"
    ULONGLONG FileLen;//8080
};将FileLen放在其他位置,接受的都是第一个数组的值,为什么啊?急死了,搞一天都不行,另外将他们三个格式化到cstring中的时候除非将FileLen放在最后,不然放在最后的数组就会是NULL

解决方案 »

  1.   

    sendto是不是成功?
    receive有没有成功?
    g_fineinfo内容是什么
      

  2.   

    [Quote=引用楼主 huangdi7922 的回复:]
    struct FILEINFO
    {
        ULONGLONG FileLen;//8080
        char FileName[100];//"win.rar"
        char ask[44];   //"I can play"
    };
    红色的就是随他们付的值,接受的结果我谢了,就上面的乱七八糟的,我原来发结构体中只有一个字符数组和一个ULON长度可以,这次发两个字符数组就发生这样的错误了
      

  3.   

    你所说的接收到的东西是用的字符串格式输出的recvBuf中的东西吗?
      

  4.   

    在结构体前加上#pragma pack(1)试试。
    #pragma pack(1)struct FILEINFO
    {
      ULONGLONG FileLen;//8080
      char FileName[100];//"win.rar"
      char ask[44]; //"I can play"
    };
      

  5.   

    加了,还是不行,是不是不能用char数组接收,用结构体接受是正确的,但是我那个地方不知是接受这种结构体,怎么才能让他既可以接受一般性的非结构体数据又可以接受结构体呢?