13

例として、現在の温度をN秒ごとにUDPデータグラムとしてブロードキャストする「スマート」温度計があるとします。

これで、これらのメッセージをリッスンしてグラフィカルに表示するクライアントを作成でき、そのクライアントを複数のコンピューターで同時に実行できます。今のところ問題ありません。

しかし、同じWindowsコンピューターでクライアントの2つのインスタンスを実行しようとすると、「すでに使用されているポートにバインド」しようとするとエラーが発生します。

これは:-

  • A:すべてのオペレーティングシステムで、UDPブロードキャストの場合と同じようにですか?
  • B:Windowsネットワークスタックの制限はありますか?
  • C:または、おそらくデータグラムの読み取り方法にバグがありますか?

AまたはBの場合、それを回避する方法はありますか。

Cの場合、コードを投稿します。

4

1 に答える 1

12

Windowsでは、を使用して複数のプロセスを同じソケットにバインドできます。

SocketOptionName.ReuseAddress

オプション(この回答を参照してください。複数のプロセスがリスニングソケットを共有する方法はありますか?)。パケットをブロードキャストすると、Windowsはそのパケットのコピーをそのエンドポイントの各リスナーに渡すように強制されます。

ロディへの回答として、はい、SO_REUSEADDRは*nixでもこのように機能します。

詳細な回答については、https://stackoverflow.com/a/14388707/705086を参照してください。

于 2012-11-09T12:35:20.770 に答える