C ++停止CAsyncSocket将单个大数据包拆分为多个小数据包

时间:2014-04-12 14:30:05

标签: c++ sockets casyncsocket

我正在编写连接服务器的客户端

有时服务器向客户端发送圆顶特殊数据包,大小为30kb,但在客户端,我在多个较小的数据包(1kb)中获得30kb,因此我的OnReceive回调几乎调用了30次,直到我得到完整数据包。 / p>

我设法通过在Sleep(1000)之前放置一个CAsyncSocket::Receive来解决这个问题,然后我在一个数据包中得到所有30kb,但放Sleep()是一个非常糟糕的主意。

我是否应该为CAsyncSocket进行任何配置?

1 个答案:

答案 0 :(得分:3)

没有。没有办法做到这一点,因为这不是TCP套接字的工作方式。 TCP不提供数据包,它提供数据流。 可能是您的数据包将以单件形式传送,因为这样做很方便,或者可能会拆分数据包或将数据包与其他数据包合并。

唯一可行的方法是让接收端知道它需要多少字节并继续读取,直到它有多少。这可能意味着在每个数据包前面发送数据包长度。