我正在编写连接服务器的客户端
有时服务器向客户端发送圆顶特殊数据包,大小为30kb,但在客户端,我在多个较小的数据包(1kb)中获得30kb,因此我的OnReceive
回调几乎调用了30次,直到我得到完整数据包。 / p>
我设法通过在Sleep(1000)
之前放置一个CAsyncSocket::Receive
来解决这个问题,然后我在一个数据包中得到所有30kb,但放Sleep()
是一个非常糟糕的主意。
我是否应该为CAsyncSocket
进行任何配置?
答案 0 :(得分:3)
没有。没有办法做到这一点,因为这不是TCP套接字的工作方式。 TCP不提供数据包,它提供数据流。 可能是您的数据包将以单件形式传送,因为这样做很方便,或者可能会拆分数据包或将数据包与其他数据包合并。
唯一可行的方法是让接收端知道它需要多少字节并继续读取,直到它有多少。这可能意味着在每个数据包前面发送数据包长度。