0

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

有时,服务器会向客户端发送大小为 30kb 的圆顶特殊数据包,但在客户端,我在多个较小的数据包(1kb)中得到 30kb,所以我的OnReceive回调调用了近 30 次,直到我得到完整的数据包。

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

有什么我应该做的配置CAsyncSocket吗?

4

1 回答 1

3

不,没有办法做到这一点,因为 TCP 套接字不是这样工作的。TCP 不传递数据包,它传递数据流。可能是因为这样做很方便,您的数据包将被一次性交付,或者它可能会拆分数据包或将它们与其他数据包合并。

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

于 2014-04-12T15:43:24.130 回答