服务器和客户端发送和接收消息,
由于命令比较多,所以得区分一下。
想用一个结构体定义消息
struct message
{
  int type;
  char data[];
}
由于这个数据大小不确定,所以不知道如何定义呢?

解决方案 »

  1.   

    我有个好的建议,你说的其实就是通信协议的问题,我给你一个方法,是大部分软件都采用的一种方法
    typedef struct head
    {
       unsigned char protrol;  //通信协议编号,自己定义,自己遵行。可以用宏定义做出来。    
       unsigned  int size;     //后面接着的数据包的大小加1;
       unsigned  char opcode;   //这个消息是用来做什么操作的宏定义。
    }
    发的时候一起发,我就不用说了。
    接的时候,先接收6个字节,因为包头的长是定长。收了之后判断协议是不是你要的包,不是扔掉。然后接着看大小,为0即后面没有数据,不为零,你就接受size个字节,这就是你要传的数据,其格式你用一个结构体定义好,这个数据结构你自己清楚,你自己知道怎么解。然后判断opcode是让你干什么,比如关闭该连接(这中情况可以不传数据),打印消息(即数据),还是客户端信息(即数据)。emule和BT都是这么干的,肯定行
      

  2.   

    typedef struct mess1
    {
        UINT messID;
        ...}mess1;
    // send:
    send(...,sizeof(mess1));//receive:
    recv(...,buf,4,0);
    if(*(UINT*)buf == mess1的ID值 )
       recv(...,buf,sizeof(mess1)-4,...);
      

  3.   

    对,我说的就是这个意思,只不过大小你要填在包头的size里。
      

  4.   

    struct message
    {
      int type;
      int length;
      char* pdata;

    先发这个头,再发这个pdata,length就是pdata长度
      

  5.   


    "char* pdata;"  --  别害人家.
      

  6.   

    你这个涉及到socket消息包的格式定义,自己去查一下资料。
      

  7.   

    struct message 

      int type; 
      char data[1024]; 
    } 数据过大的,比如传文件。另开连接