小弟正在做一个数据压缩的问题,压缩后通过WSASend传输,
如何在客户端正确接受压缩后的数据?
现在的问题是客户端不知道用WSARecv时应该接受多大buffer的数据?
分不多,请各位大虾指教?

解决方案 »

  1.   

    如果是使用tcp传输,就应该先发送报文的长度,因为tcp是流式的。
      

  2.   

    一般地,一个包有一个头部,以联众游戏包为例吧
    typedef struct PACKETHEADER
    {
        DWORD dwType;  //包类型
        DWORD dwLen;   //包长度
    }PACKETHEADER;
    这个包的类型如果 (dwType & 0x20000000) == 0x20000000 表示这个包是压缩包(你甚至可以在类型描述里面用某些为表示不同的压缩算法),然后根据dwLen就知道这个包的长度是多少,接收完了再解压缩。
      

  3.   

    纠正:联众游戏数据包并不是 (dwType & 0x20000000) == 0x20000000的时候为压缩包,我是举例说的一个数字,联众好像不是这个数字。
      

  4.   

    你压缩的数据函数应该返回一个压缩后长度的吧
    我压缩是用zlib的动态连接库,就是你自己写压缩函数,也该有返回目标码长度
    否则,怎么搞啊