Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Java ::  UDP von Linux zu Linux     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
lnxudn
Unregistrierter




Beitrag lnxudn Unregistrierter 14:19:22 05.06.2012   Titel:   UDP von Linux zu Linux            Zitieren

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:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 :-)
lnxudn
Unregistrierter




Beitrag lnxudn Unregistrierter 15:29:15 05.06.2012   Titel:              Zitieren

Gerade bemerkt:
Der Empfänger braucht den Port!

Java:
            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)
_--
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.10.2010
Beiträge: 1204
Beitrag _-- Mitglied 00:42:24 06.06.2012   Titel:              Zitieren

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.

_________________
"there can only be one king." - pablo escobar
lnxudn
Unregistrierter




Beitrag lnxudn Unregistrierter 14:39:16 06.06.2012   Titel:              Zitieren

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
lnxudn
Unregistrierter




Beitrag lnxudn Unregistrierter 21:31:35 06.06.2012   Titel:              Zitieren

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
Fedaykin
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.01.2007
Beiträge: 882
Beitrag Fedaykin Mitglied 08:18:45 08.06.2012   Titel:              Zitieren

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.

_________________
Alle Fehler in meinen Codebeispielen dienen dazu, einigen Forenbesserwisser das Ego zu stärken, indem Sie mal wieder kommentare darüber Abgeben können was andere Falsch machen.
c++.de :: Java ::  UDP von Linux zu Linux   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.