1

私がwinsockについて読んだことから、recvは1回の呼び出しで送信者からすべてのデータを受信しない傾向があります。たとえば、クライアントから300バイトを送信し、サーバーでrecvを呼び出すと、最初の呼び出しで200バイトしか受信できず、バッファーがそれらの200バイトでいっぱいになる可能性があります。 ?最後の100バイトはどうなりますか?

また、バッファが小さすぎて512バイトなどで、クライアントが600を送信するとします。最初のrecv呼び出しでバッファがいっぱいになり、最後の88バイトが削除されますか?別のバッファを使用してもう一度recvを呼び出すと、そのバッファの最初の88バイトが残りのデータになりますか?

そして第3に、1つと2つが真で、データのパケット全体を別々のバッファーで受信した場合、データの解析を開始するために、それらを1つのバッファーにつなぎ合わせる必要がありますか?

4

1 に答える 1

3

ここではTCPを想定しています。

最初の呼び出しで200バイトしか受信できず、バッファがそれらの200バイトでいっぱいになる可能性はありますか?

はい。

最後の100バイトはどうなりますか?

次回は受け取ります。

また、バッファが小さすぎて512バイトなどで、クライアントが600を送信するとします。最初のrecv呼び出しでバッファがいっぱいになり、最後の88バイトが削除されますか?

いいえ。

別のバッファを使用してもう一度recvを呼び出すと、最初の88バイトが残りのデータになりますか?

はい。

そして第3に、1つと2つが真で、データのパケット全体を別々のバッファーで受信した場合、データの解析を開始するために、それらを1つのバッファーにつなぎ合わせる必要がありますか?

それはあなた次第です。1つの連続したバッファーにデータが必要ですか?もしそうなら、はい。

于 2012-04-10T23:21:41.297 に答える