2

2つのUDPソケット(SOCKET)があります。1つは送信用で、もう1つはWindowsマシンでの受信用です。どちらもうまく機能しますが、問題は、送信ソケットからメッセージを受信して​​いるプログラムが、メッセージを送信したのと同じポートに応答することです。

送信ソケットをバインドしない場合、を使用しsendtoて送信するエフェメラルポートを選択することを知っています。

次のいずれかが可能かどうかを知りたいのですが、可能であれば、それを行うための推奨される方法は何ですか。

  • 送信ソケットと受信ソケットの両方を選択したポートにバインドして、外部プログラムがメッセージを送り返したときにメッセージを受信できるようにします。
  • 最後にメッセージを送信したポートで受信するように、受信ソケットがバインドされているポートを更新します(これによって競合状態が発生するかどうかはわかりません)。
  • 他の正しい方法。

これまでに試しました:

  • 送信ソケットをバインドしていません(開いているポートから宛先ポートに送信します)。変更されない限り、そのポートでメッセージを正常に受信できますが、最終的には変更されます。
  • 送信ソケットと受信ソケットの両方を目的のポートにバインドします。これにより、スニファを使用してパケットを監視するときに望ましい動作が作成されますが、メッセージが正しいポートとIPに送信されていることを確認しても、受信ソケットはメッセージを受信しません。

パケットは複数の外部エンティティから受信されており、特定の順序であることが保証されているわけではありません。

前もって感謝します!

4

1 に答える 1

1

スレッドを使用して送信データと受信データを分離しようとしているようです。UDP は 1 つのスレッドで処理するのが非常に簡単なので、このアプローチには疑問があります。それでも、必要に応じて、両方のスレッドから同じソケットを使用することができます (関連する質問を参照してください:同じソケットで send/recv への並列呼び出しは有効ですか? )。それだけbind(2)で、オプションでconnect(2)それ。

于 2012-06-13T21:27:25.280 に答える