2011-10-28 14 views
0

私は、単一のポートでデータメッセージをブロードキャストするUDP通信システムを持っています。 2番目のシステムでは、TIdUDPServerコンポーネントでこれらのメッセージをキャプチャしますが、このアプリケーションはメッセージのサブセットのみを処理します。Indy TIdUDPSeverに複数のインスタンスが同じUDPポートにリッスンできるようにリンクできます

UDPデータブロードキャストで他のメッセージを処理するための2番目のアプリケーションを作成し始めたとき、うまく動作します。しかし、私は両方のアプリケーションを同時に実行しようとすると、2番目のアプリケーションが例外 'ソケットエラー#10048アドレスが既に使用中です。

Indyをオーバーライドして、2つのコンポーネントが同じUDPポートを共有することは可能ですか?

+0

データグラムを受信したときにはどうなりますか?どのコンポーネントを使用する必要がありますか?あなたがしたいことをする方法はおそらくありますが、それが何であるか教えてください。 –

+0

* easy-networking *コンポーネントで作業を始める前に、いくつかのネットワーキングに関するよくある質問を読んでください。 –

答えて

2

どちらのアプリケーションも、それぞれのソケットを開くときにSO_REUSEADDRフラグを指定する必要があります。 Indyコンポーネントは、その目的のためにReuseSocketプロパティを持ちます。しかし、複数のアプリが同じポートを共有している場合、どのアプリがどのメッセージを受信するかを制御または保証する方法はありません。彼らは同じメッセージのコピーを受け取ることはありません。それを行う必要がある場合、本当のメッセージのすべてを排他的に受け取り、必要に応じて適切なアプリに転送する3番目のアプリが必要です。それ以外の場合は、ソケットに関係なく未処理のネットワークデータを受信するようにアプリがプロミスキャスモードのNICをリッスンするようにしてください(ただし、Indyは使用できません)。

関連する問題