0

サーバーに接続するクライアントを書いています

サーバーが 30kb のサイズのドーム スペシャル パケットをクライアントに送信することがありますが、クライアント側では、複数の小さなパケット (1kb) で 30kb をOnReceive取得するため、完全なパケットを取得するまでコールバックがほぼ 30 回呼び出されます。

Sleep(1000)直前にを配置 することでこの問題を解決できたCAsyncSocket::Receiveので、30kb すべてを 1 つのパケットにまとめましたSleep()が、配置は非常に悪い考えです。

のために行うべき設定はありますCAsyncSocketか?

4

1 に答える 1

3

いいえ。これを行う方法はありません。これは TCP ソケットの仕組みではないためです。TCP はパケットを配信するのではなく、データのストリームを配信します。便利なため、パケットが 1 つにまとめて配送される場合や、パケットが分割されたり、他のパケットと結合されたりする場合があります。

これを行う唯一の信頼できる方法は、受信側が必要なバイト数を認識し、そのバイト数になるまで読み取りを続けることです。これは、たとえば、各パケットの前にパケット長を送信することを意味する場合があります。

于 2014-04-12T15:43:24.130 に答える