0

udpを使ってメッセージを送信するプログラムを作りました。プログラムは最初に、デフォルトのIPアドレスとポートを使用してudpソケットを初期化します。ただし、ユーザーが実行時に宛先IPアドレスとポートを変更できるようにする必要もあります。

現在、ユーザーがIPアドレス/ポートを変更した場合は現在のソケットを閉じ、ソケットを新しいIPアドレス/ポートで再初期化/バインドします。

プログラムは、初期ソケットを使用してメッセージを正常に送信できます。しかし、IPアドレス/ポートを再バインドすると、バインドが失敗することがありました。Bind()は-1の値を返します。オンラインで検索したところ、ソケットが閉じているときにTCPプロトコルに2mslのタイムアウトがあることがわかりました。それはUDPに適用されますか?

また、ユーザーが宛先IP/ポートを変更できるようにするためのより良い方法はありますか。私はビジュアルスタジオでC++を使用しています。

ありがとう。

4

1 に答える 1

0

2MSI タイムアウトは UDP には適用されません。ただし、別のアプリがバインドしようとしている IP/ポートを使用している可能性があります。IP/ポートが安全に使用できることがわかっている場合は、 を呼び出す前に を使用setsockopt()してソケットのオプションを有効にすることができます。SO_REUSEADDRbind()

于 2012-11-10T04:13:36.700 に答える