假如有一个结构,数据类型有好几种。怎么传?服务器端和客户端应该做些什么?如果传送地是一个文件,又该怎么传?

解决方案 »

  1.   

    如果里面没有指针,可以用sizeof得到大小的,可以直接memcpy到一个buf里面传,否则,自己定义格式把数据按格式写入一个buf里面,然后传...........
      

  2.   

    struct   a 

      int b;
      CString c;   
    }; //定义变量,然后赋值 
    a...   =   ...; 
    c=...然后发送数据的时候,直接用&a,长度就sizeof(a);问题是接受的时候,怎么还原b和c?
      

  3.   

    发送的时候不是发送的地址么?比如发送pBuffer
    还原的时候
    (youStruct *)pBuffer->a 就是里面的a成员变量了
      

  4.   

    首先要在服务器与客户端定义同样的结构体,建议不要传cstring,用char buffer[]吧
    发送端:send(servsocket,(char*)&a,sizeof(a),0)
    接收端:recv(cliensocket,(char*)&a,sizeof(a),0)
    然后,a.b=.....
         a.c=.....
      

  5.   

    把结构和文件转换成对方可以理解的字节序列是关键,最好定义一个自己的传送协议
    可以试想一下,你要传送10个有可能相同也有可能不同的struct类型怎么传?
    传送的报文中必须有传送类型和长度的信息,才能做到。
      

  6.   

    “CString c”要转换成char szC[1024];
    否则长度都不定,你让socket send多长为好?
      

  7.   

    定个协议struct
    send发送是拷贝一段地址而已
      

  8.   

     不能传结构的,
    但是你可以使用缓存buf,
    按结构大小填写数据,再发送buf.
      

  9.   

    如果是UDP协议,就将所有参数写在一个字符串buf里,每一个参数用分隔符(如|)隔开,
    发送给服务器,服务器端接收到字符串后,再用strtok函数解析出来。strtok解析出来的是char类型,
    再传唤成相应的类型,知识点是char类型转化成*型,网上有相应事例。如果是tcp/ip协议,就直接用package.cpp/.h,可以直接写入相应类型的数据。如:
    CLPackage package;
    package.SetDword(0);
    package.SetByte(6); 
    类中提供各种函数可以往包中写入不同类型的数据。
      

  10.   

    怎么定义就怎么还原。
    客户端和服务器都定义相同的struct,在一端接收到以后,直接用s.xxx获取
      

  11.   

    CString 是变长的变量,不能传。
    传地址
      

  12.   

    定义一个buf[1024]
    typedef struct _pvmsg

       int c;
       int b;
       byte d;
       BOOL id;
       long l;
       char str[100];
       struct tmp;
    } PVM,*PPVM;使用时 PPVM pMsg= (PPVM)buf;
    直接使用pMsg 就了
    可以直接操作有个问题就是字节对齐问题需要自己注意,
    最好都用int的
    不然使用#pragram
      

  13.   

    如果里面有指针的话,最好能够重组下数据。
    总是,socket传什么,都把他当做一个内存块,里面什么类型,什么内容,都不用管,传过去之后,另外一边再解析就ok了。
      

  14.   

    你举的例子buffer好像比结构体大,是不是不一样大(只要不比结构小)也行?
    另外:字节对齐指的什么?
      

  15.   

    sorry,仔细看了下帖子,那天我答得不对?