2011-01-22 16 views
3

2つ以上のプログラムが1つのポートでUDPパッケージを監視することは可能ですか? RS-232データをポート55110上のUDPに変換するデバイスがありますが、特定のコンピュータで1つのリスナしか実行できないようです。 2番目の原因「Address already in use」を試みます。 REUSE => 1は役に立ちませんので、コンピュータで聞いている他のプログラムがあります。複数のユーザーがデータをサンプリングしたい私はとても基本的な質問をお詫び申し上げます。「アドレスは既に使用中です」:私はUDPを誤解しています

答えて

3

2つのプログラムが同じUDPポートでリッスンすることは可能ですが、両方のプログラムがポートを共有できるように指定する必要があります。ここで(UDPソケット上だけで(バインドを呼ぶ前に呼ばれる))、これを行うためにOSに指示します私のコードからの抜粋です:

if (allowShared) 
{ 
    const int trueValue = 1; 
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &trueValue, sizeof(trueValue)); 
#ifdef __APPLE__ // MacOS/X requires an additional call also 
    setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &trueValue, sizeof(trueValue)); 
#endif 
} 
+4

のみブロードキャスト&マルチキャストパケットが多重化され、ユニキャストパケットは最初のソケットに送信されます。 –

0

あなたが同じUDPポートで待機二つのアプリケーションを取得した後でも、スティーブとして-oのコメントによれば、ユニキャストパケットは多重化されていません。これは、各パケットがリスニングアプリケーションのの1つをに送信することを意味します。

これを行う最善の方法は、ポート55110上のリスナーを設定して、着信パケットを、複数のクライアントアプリケーションがリスンしているlocalhost上の他のポートのリストに再送信するだけです。

+0

UDPを使用するという考えは、システム内のすべてのコンピュータに楽器からデータを送信する簡単な方法を持つことで、ポート番号だけを知っているデータストリームに「タップ」する簡単なコードを書くことができました。これはUDPの悪用ですか? – javery

+0

@javery:いいえ、いいですが、これを達成するにはUDPブロードキャスト(またはマルチキャストがより簡単です)を使用する必要があります。 – caf

関連する問題