2012-03-25 11 views
0

Ich habe zwei Threads, die über DatagramSockets kommunizieren. Ich möchte jetzt einen dritten Thread in der Lage sein, die Kommunikation zu hören. Nach dem Lesen von Broadcasting to Multiple Recipients scheint es, dass zwei MulticastSockets auf dem dritten Thread ist, was ich suche.Ist dies mit Sockets möglich?

Allerdings bekomme ich eine "java.net.BindException: Adresse bereits verwendet: Kann nicht binden" Fehler beim Versuch, die MulticastSockets an die gleichen Ports zu binden, die die DatagramSockets in den ersten beiden Threads verwenden.

Antwort

1

Mit Hilfe von einigen der Antworten und Kommentare hier habe ich es gelöst, indem ich Folgendes getan habe.

Ich habe die 2 ursprünglichen Threads geändert, um Multicast-Sockets zu verwenden, um zu kommunizieren, und der dritte Thread hat jetzt 2 Mulitcast-Sockets, die an diese Ports gebunden sind, damit es die Kommunikation überwachen kann. Wahrscheinlich nicht die schönste Lösung, aber es wird für meine Bedürfnisse reichen

0

Nun, Sie bekommen die Ausnahme, weil Sie nicht mehrere Sockets an den gleichen Port binden können. Wenn Sie sowohl Point-to-Point als auch Multicast unterstützen möchten, müssen Sie für jeden Port unterschiedliche Ports festlegen. Andernfalls, wenn Sie immer Multicast-Broadcast durchführen, können Sie einfach die regulären Datagramm-Sockets vollständig löschen.

+0

Ja können Sie (in Java) sie sind alle MulticastSockets. – EJP

+0

Ihre Antwort ist 100% falsch, so einfach ist das. So ist dein Kommentar, der für TCP gilt, nicht für UDP. – EJP

+0

Ich hätte hinzufügen sollen "oder sie alle hatten' setReuseAddress (true) 'angerufen, die die Standardeinstellung für' MulticastSocket' ist. ' – EJP

0

Sie haben zwei Threads im selben Programm, die über Socket kommunizieren? Wie wäre es mit der Erstellung eines queue für sie, so dass es gerade in der Prozesskommunikation ist?

+0

Ich stimme der Warteschlange zu, aber zu Ihrem zweiten Absatz, ja Sie können, vorausgesetzt (in Java) sind sie alle MulticastSockets. – EJP

+0

Ich lese seine Frage als versuchen, den Port zu verwenden, auf dem das Datagramm bereits Multicast-Pakete empfängt. – Bill

+0

Wenn für alle betroffenen Sockets 'setReuseAddress (true)' aufgerufen wurde, was der Standard für 'MulticastSocket' ist, können sie denselben Port verwenden. – EJP

Verwandte Themen