关于使用SOCKET传送结构体的问题:
  我想通过CSocket类或其相关类在局域网内传送这样一个简单的数据结构:  struct
{
  char msg1[100];
  char msg2[100]; 
}msg;
  
  请问在VC中如何实现???
  有DEMO更好.^^嘿嘿^^

解决方案 »

  1.   

    typedef struct __msg
    {
    char msg1[100];
    char msg2[100]; 
    }msg;
    byte lpBuff[500];
    msg data;strcpy(data.msg1,"asdf");
    strcpy(data.msg2,"asdf");socket.Send(&data,sizeof(msg));..
    msg dataRecv;
    socket.Recv(dataRecv,sizeof(msg));
    MessageBox(dataRecv.msg1);
      

  2.   

    send(socket,(char*)&msg,sizeof(msg),0);
      

  3.   

    同意 xiaohyy(醉大饿极)的方法,在发送的时候只需要发送一个你所需要的内存段就可以了,首地址 (char*)&msg ,长度sizeof(msg),只需要将这一段放到你的sendbuff里面去,然后发送,在receive以后再恢复这个结构就可以了ps:呵呵,只是做了一个解释,xiaohyy(醉大饿极)大侠勿怪,:)
      

  4.   

    其实建议你使用CSocketFile类, CArchive类等...这很好了, 流是强大的, 你的结构体幸好是固定的长度, 要是 不是100, 而是随便的字符串就不行了.
      

  5.   

    To  Healer(天降甘草):“你的结构体幸好是固定的长度, 要是 不是100, 而是随便的字符串就不行了”-----我可以啊,我定义的结构体是:typedef struct _ROOM
    {
      LPCTSTR RechNum;
      int RoomID;
      int SeatID;
    }收的时候可以的啊。
      

  6.   

    To:   yangdabao (嘿嘿) 
      当使用 xiaohyy(醉大饿极) 说的方法的时候,要注意字节对齐的问题,有可能你定义的结构体的实际大小是7字节,但系统编译的时候给你字节对齐分配了8字节,而通讯程序的接收边可能使用了不同的编译设置或者运行于不同的系统之上时,可能会按照7字节接收,这样的错误很难查出来,要注意。在不明朗的情况下,最好使用#pragma pack(1)和#pragma pack()强制结构体字节对齐。
      还有一个问题就是字节顺序给平台也是可能不同的,如果你的结构体内含有integer,传送接收使用强制转化可能得到的结构体域值会与期望的不一样
      另外就是如 [brytison(辉子)] 所说,如果结构体内含有运行时才能确定大小的域就不可以用这种强制转化了。其实最好是如 [sharkhuang(爱情和程序都读不懂)] 所说:串行化!反串行化!