Wieso funktioniert der Java Broadcast(DatagramSocket) nicht unter Windows?

...komplette Frage anzeigen

3 Antworten

Ich habe mir mal etwas Zeit genommen um mir das etwas genauer anzusehen. 

Dein eigentliches Problem scheitert an der Verwendung des Broadcasts mittels deines UDP-Packages.

Allerdings:

Wenn ich dieses Programm unter macOs starte

muss ich trotzdem fragen: Funktioniert es wirklich?

 "Cannot assign requested address: cannot bind"

Diese Meldung ist richtig so. Würde sie nicht kommen, hättest du einen anderen Fehler.

Deine Client-Klasse sollte eine Instanz von DatagramSocket ohne Parameter starten.  Jedoch Broadcast aktivieren:

DatagramSocket socket = new DatagramSocket();
socket.setBroadcast(true);

Die Information, wohin(Ziel-Adresse und Port) etwas geschickt wird, teilst du dann nur dem Paket mit.

byte[] buffer;
String huhu = "huhu"; 
buffer = huhu.getBytes();

InetAddress broadcastAddress = ...;

socket.send(new DatagramPacket(buffer, buffer.length, broadcastAddress, ExampleServer.EXAMPLE_PORT));

Die Server-Klasse wiederum muss sehr wohl einen Port bei DatagramSocket verwenden.

DatagramSocket ds = new DatagramSocket(SERVER_PORT);

Um nun zu prüfen, ob hier auch etwas ankommt, stellst du ein leeres DatagramPacket bereit, was via Receive vom Datagramsocket bei eingehender Nachricht befüllt wird.

byte[] buffer = new byte[500];
DatagramPacket dgp = new DatagramPacket(buffer, buffer.length);
ds.receive(dgp);

Ein vollständiges Beispiel für einen ChatServer-Client, der über UDP Kommuniziert, findest du beispielsweise hier:

http://www.java2s.com/Code/Java/Network-Protocol/UseDatagramSockettosendoutandreceiveDatagramPacket.htm

Eine Chat-Server-Client stellt die Grundprinzipien der Netzwerk-Programmierung sehr verständlich dar und kann für viele Netzwerk-Anwendungen als Basis genommen werden.

Bohne999 19.01.2017, 11:23

Vielen vielen Dank 😊😊

0

Doch unter Windows bekomme ich die Fehlermeldung "Cannot assign requested address: cannot bind"

Ich es schon mit deaktivierter Firewall probiert, bzw die entsprechenden Regeln festgelegt.

Weiß jemand, woran das liegen könnte? :)

Welcher Teil funktioniert nicht?  Oder wo bekommst du die Meldung?

Bohne999 18.01.2017, 21:25

An der Stelle wo ich das DatagramSocket Objekt "socket" initialisiere.

0

Was möchtest Du wissen?