1

クライアント、プロキシ、サーバーの 3 つのコンポーネントがあります。プロキシの負荷が高くなると、1 MB がいっぱいになるようにソケット バッファーが構成されます。1 回のショットで 1 MB のバッファ全体を読み取ってから処理する方法はありますか?

ご参考までに:

  1. すべてのデータ グラムは、MTU サイズを超えることはなく、各パケットの長さも追加された定義済みの構造形式になっています。

  2. プロキシはクライアントとサーバーの間でデータをルーティングするため、プロデューサーとコンシューマーのスレッドを試しましたが、問題は解決しません

4

1 に答える 1

2

短い答え:いいえ。

長い回答: バークレー スタイルのソケット実装では、呼び出しごとに 1 つのパケットのみを送受信できます。したがって、完全なネットワーク ストリームを読み取り、反対側で再生することはできません。

理由の 1 つは、UDP ソケットが複数のソースからデータを受信できることです。インターフェイスは、送信者のソケット アドレスなどのメタ情報と、少なくともパケット サイズを呼び出し元に渡すことができる必要があります。これは一連のデータを解析する必要があり、基準を満たすパケットを選択します。最後に、送信するパケットの束を作成できます。

各パケットをチェックする可能性が必要なので、パケットが本当に期待される場合は、束からパケットを読み取る関数が必要です。これが関数recvfromです。

于 2013-03-07T12:07:13.563 に答える