UDP von Linux zu Linux



  • Hi!
    Ich möchte gerne ein UDP-Paket von einem Rechner zu einem anderen versenden.
    Auf beiden Rechnern läuft Linux (Mint und Fedora) und sie befinden sich im lokalen Netzwerk.
    Der Code ist relativ minimal und könnte so aus einem beliebigen Tutorial stammen.

    Versender:

    import java.net.*;
    
    public class Sender {
    	public static void main(String[] args) {
    		try {
    			int port = 9876;
    			InetAddress IPAddress = InetAddress.getByName("192.168.178.100");
    			DatagramSocket serverSocket = new DatagramSocket();
    			//serverSocket.setBroadcast(true);
    			byte[] sendData = { 1, 3, 3, 1 };
    			DatagramPacket broadcastPacket = new DatagramPacket(sendData,
    					sendData.length, IPAddress, port);
    			serverSocket.send(broadcastPacket);
    		} catch (Exception e) {
    			System.err.println(e);
    		}
    	}
    }
    

    Empfänger:

    import java.net.*;
    
    public class Empfaenger {
    	public static void main(String[] args) {
    		try {
    			DatagramSocket clientSocket = new DatagramSocket();
    			//clientSocket.setBroadcast(true);
    			byte[] buf = new byte[4];
    			while (true) {
    				DatagramPacket broadcastPacket = new DatagramPacket(buf, 4);
    				clientSocket.receive(broadcastPacket);
    				System.out.println(java.util.Arrays.toString(buf));
    			}
    		} catch (Exception e) {
    			System.err.println(e);
    		}
    	}
    }
    

    Wenn ich beides auf einem Rechner starte (und an localhost verschicke) kommt das Paket an. Sobald ich an die Broadcast-Adresse schicke (darum soll es später gehen) oder von einem anderen Rechner ausgehend sende, kommt nichts mehr an.

    Websuche hat mir bisher noch nicht weiter geholfen.
    Was sind die möglichen Fehlerquellen? Code? Router? Linux-Konfiguration? Bestimmte Ports für UDP?
    Für Lösungsansätze oder Hinweise wäre ich dankbar

    freundliche Grüße 🙂



  • Gerade bemerkt:
    Der Empfänger braucht den Port!

    int port = 9876;
    			DatagramSocket clientSocket = new DatagramSocket(port);
    

    Achtung: Dies löst das Problem nicht! (der Fehler ist entstanden, weil ich beim übertragen ins Forum zu viel weggelöscht habe)



  • bin mir jetzt nicht ganz sicher und es ist bei broadcast bischen was anderes aber normal muss man immer angeben, von welchen ip's man nachrichten empfangen will.



  • Hi!
    Danke schonmal fürs Lesen. So richtig scheint sich niemand dran zu trauen.
    Es wird wahrscheinlich wirklich ein Problem mit Linux bzw. meinem Setup zuhause sein, denn bei einem Kollegen funktioniert genau der obige Code (OS X zu Win7).

    Nochmal zur Verdeutlichung: Broadcast ist erst der zweite Schritt. Das einfache Versenden (mit direkter IP-Angabe) funktioniert bei mir bereits nicht.

    Die EmpfangsIP muss eigentlich nicht angegeben werden, weil der Socket ohne Paramter erstellt wurde (und dann an die Wildcard-Adresse gebunden ist).

    Ideen?

    Freundliche Grüße



  • http://en.wikipedia.org/wiki/User_Datagram_Protocol#Service_ports schrieb:

    Port numbers 1024 through 49151 are the registered ports used for IANA-registered services. Ports 49152 through 65535 are dynamic ports that are not officially designated for any specific service, and can be used for any purpose.

    Ein kleiner Schritt nach vorne: Mit Port 55555 funktioniert es nun auf einem Rechner auch mit der Netzwerk-Adresse (192.168.178.100). Dies war vorher nicht der Fall. Vom einem Linux-System zum anderen funktioniert aber immer noch nicht.

    Nichtsdestotrotz ist das hier vielleicht eine Anregung und erinnert jemanden von euch an die Lösung des Problems.

    Freundliche Grüße



  • Hmm... das klingt wohl eher nach sicherheitseinstellungen im Netzwerk. Ggf schluckt entweder das Linux, oder ggf ein Router die Packete weg. Schonmal mit Wireshark geschaut was am absendenden Rechner wirklich ausgeht, was beim Router ankommt und weitergeleitet wird? Ich denke mal irgendwer meidet einfach das Packet.


Anmelden zum Antworten