私は、サーバーが 40 のクライアントから継続的にデータを受信する 1 つのソケットを持つ udp サーバー/クライアント アプリケーションを開発しました。ここで、40 のクライアントすべてが一度にデータを送信するとどうなるか知りたいです。私の理解によると、データは受信バッファーにキューに入れられ、次に recvfrom() を呼び出すと、バッファーにキューに入れられたデータが受信されます。つまり、recvfrom() を 40 回呼び出して、たとえすべてのクライアントが同時にデータを送信しました。また、40 クライアントのすべてのデータが受信バッファにキューイングされるか、データの一部が破棄されるかを知りたいですか? また、受信バッファにデータをキューに入れることができる最大バッファ サイズはどれくらいですか。
質問する
1332 次
2 に答える
2
すべてのクライアントが同時にデータを送信したとしても、40 個のクライアントすべてのデータを受信するには、recvfrom() を 40 回呼び出す必要があります。
つまり、ネットワーク スタックによって個別の UDP データグラムを組み合わせることができるかどうかを尋ねているということです。答えは: いいえ、別の呼び出しを必要とする別のデータグラムとして到着しますrecvfrom()
。
また、40 クライアントのすべてのデータが受信バッファにキューイングされるか、データの一部が破棄されるかを知りたいですか?
UDP は配信を保証しません。パケットは、送信ホスト、ルート上の任意のデバイス、および受信ホストなど、ルートのどこにでもドロップされる可能性があります。
また、受信バッファにデータをキューに入れることができる最大バッファ サイズはどれくらいですか。
これは OS に依存し、通常は構成可能です。受信ホストに到達する前に、パケットがドロップされる可能性があることに注意してください。
于 2013-04-12T07:43:12.320 に答える
2
実際、それはすべて OS ソケット バッファのサイズに依存します。Linux では構成がかなり簡単なので、おそらく Windows システム用に変更する方法をグーグルで検索するだけで済みます。
于 2013-04-12T07:43:19.410 に答える