使用CSocket编程时,需要传输的是自己所定义的类所生成的对象,请问该如何发送、接收?
需要考虑接收发送的缓冲区大小吗?如果对象太大,会不会需要分包?顺便问一下,我看了看论坛上的问题,好像大家都没有用CSocket类,而是直接用了最初的winsocket,难道说CSocket类有什么不好吗?

解决方案 »

  1.   

    建议你还是用winsock api吧
    因为类毕竟封装的东西太多
      

  2.   

    用memcpy把类里的东西COPY到一个BUFF,再发送,
    接收的时候,把char*指针强转成类的指针,
      

  3.   

    楼上的可不可以再说的清楚一些,怎么copy啊?怎么强制转换?
    不好意思,我没有接触过这些,还请多多指教:)
      

  4.   

    MSDN不赞成这么用。
    CSocket在这种情况下可能出现异常的错误。
      

  5.   

    那Socket能传输什么样的数据类型?
      

  6.   

    pclili(黑客天使) ( ) 信誉:100  
    用memcpy把类里的东西COPY到一个BUFF,再发送,
    接收的时候,把char*指针强转成类的指针。are u sure ,呵呵,是测试过的吗?Mark。
      
      

  7.   

    怎么用memcpy?
    我试了一下:
    这是我定义的类:
    class CTest
    {
      char* name;
      char* type;
      char* where;
    }声明一个对象
    CTest marry;
    然后在发送前转换:
    char* buf[100];
    memcpy(buf,marry);
    m_clientSocket->Send(buf,99);单步调试后发现memcpy(buf,marry);执行后根本就不对,都不知道转化成什么了。是我理解的不对吗?还有什么办法吗?
      

  8.   

    有使用CSocketFile的例子可以参考么?
      

  9.   

    看MFC自己带的例子,或者字节看它的CSocketFile
    类是怎么写的
      

  10.   

    可以把类转化成一个联合类型的
    然后发送(呵呵,我这么想的不一定对,因为联合在内存中是连续存储的,所以你发的应该是和
    发一个BUffer缓冲区没什么区别)
      

  11.   

    声明一个对象
    CTest marry;
    然后在发送前转换:
    char* buf[100];
    memcpy(buf,marry);
    --------------------------------------------------------------------------------
    楼主 这么做不对吧!
    你为什么不这样?
    cahr *buf=new char[100];
    memcpy(buf,marry.name,strlen(marry.name));
    memcpy(buf+strlen(marry.name),marry.type,strlen(marry.type));
    memcpy(buf+strlen(marry.name)+strlen(marry.where),marry.where,
     strlen(marry.where));
    ..........其实就是所谓的序列化。
    当然也可以用CSocketFile类。它直接支持序列化