DatagramSocket über das Internet benutzen

  • Themenstarter Themenstarter FragenderHier
  • Beginndatum Beginndatum
F

FragenderHier

Gast
Hey,

ich hätte mal eine Frage, unzwar wie kann man mit dem DatagramSocket (UDP verbindung von Java) über das Internet auf einen zweiten zugreifen (Client / Server prinzip)?
Denn normalerweise wird beim Server der DatagramSocket über nur einen Port eingestellt und beim Client ohne einen parameter in der Klammer, dafür eben beim Paket vom client die angaben host + port, was jedoch nicht funktioniert.

lg
 
Wie schon gesagt.. es besteht keine verbindung.. ich versuche es mal näher zu erläutern durch ein wenig code:

Server:
Java:
byte[]              buffer	 = new byte[ 65508 ];
DatagramSocket socket = new DatagramSocket( port );
DatagramPacket packet = new DatagramPacket( this.buffer, this.buffer.length );
....
socket.receive( packet ); //Warten bis ein paket eingeht

Mehr brauche ich vom Server-Code nicht zu zeigen, da es nicht weitergeht.
Die internet ip vom pc hole ich mir über die seite wieistmeineip.de (via code, auch schon überprüft)
Der port wird dabei manuell eingesetzt... unzwar durch einen, auf dem ich auch manchmal spiele server laufen lasse, von daher sollte es damit keine probleme geben.

Client:
Java:
DatagramSocket socket = new DatagramSocket();
byte[]               buffer	 = new byte[ 65508 ];
DatagramPacket  packet = new DatagramPacket( this.buffer, this.buffer.length );

dann wird vom client ein packet zum host verschickt, das dieser die ip + port vom client bekommt und diese somit kommunizieren können, offline funktioniert das auch wunderbar, aber sobald ich die online ip benutze nicht mehr.

lg
 
hmm ja, ich habe jetzt auch das Beispiel probiert und mit localhost gehts, mit der Internetadresse nicht,
aller Code arbeitet, nur scheint das Paket nicht anzukommen,
ich kann dann dazu leider nichts helfen

edit: mogel scheint es ja zu haben, gleich mal testen 😉
edit: BindException: Cannot assign requested address ;(
 
Zuletzt bearbeitet von einem Moderator:
Ja ich habe das auch schon alles durchgelesen, da steht zwar überall das es für lokale ports und netzwerkadressen ist, aber beim socket steht das ebenso und es funktioniert, von daher bringt mich das nicht sonderlich weiter.

lg
 
jetzt läuft es bei mir,
wieistmeineip.de lieferte nur die IP des Providers, bzw. irgendeine abweichende,
die eigene mit ifconfig unter Linux oder ipconfig unter Windows abfragen,
bei Server-Deklaration + Client-Senden angeben

edit:
ein [c]socket = new DatagramSocket(4445);[/c]-Server funktioniert dann auch zusammen mit der richtigen IP für Client..
 
Zuletzt bearbeitet von einem Moderator:
Moment.. die IP ist dann immernoch Lokal, von daher wird das ergebnis das gleiche sein wie bei localhost, bzw 127.0.0.1

lg
 
keine Ahnung,
Java:
		InetAddress address = InetAddress.getByName("192.168....");
		System.out.println(address.getHostAddress());
		System.out.println(address.getHostName());
habe ich gerade, kann meinetwegen auch ein andere Umschreibung von localhost sein,
jedenfalls kommt da als hostname auch mein Rechnername raus,

bei der öffentlichen Adresse erscheint als hostname "pool.mediaWays.net" usw.
(bei deiner IP die ich hier im Forum neben dem Posting steht sehe ich das auch in etwa + eine Stadt die es gar nicht gibt? 😉 )

mehr kann ich nun wohl wirklich nicht mehr beitragen
 
Zuletzt bearbeitet von einem Moderator:
So erst einmal richtig eingeloggt (FragenderHier)..
also du kannst sehen das die IP lokal ist, da ipconfig, bzw ipconfig /all nur die konfiguration deines lokalen netzwerkes anzeigt.
Dazu kommt über dem befehl tracert (IP) auch wie du schon sagtest, der Hostname raus, den du im Netzwerk eingestellt hast, jedoch ist es bei den NAT adressen aus dem internet anders.. da läuft alles über den provider, aus dem grunde ist es auch für versteckte ermittler kein problem deine adresse herauszufinden, da diese vom provider auf anfrage herausgestellt werden (natürlich nicht an jeden, wobei ich glaube das es da auch schon diverse seiten gibt, bei denen man über die IP den standort einer person herausfinden kann).

lg
 
ein [c]socket = new DatagramSocket(4445);[/c]-Server funktioniert dann auch zusammen mit der richtigen IP für Client..

öhm - nein ... weil

Moment.. die IP ist dann immernoch Lokal, von daher wird das ergebnis das gleiche sein wie bei localhost, bzw 127.0.0.1
*ding* *ding* *ding* ... [c]new DatagramSocket(port)[/c] bindet nur auf 127.0.0.1 ... nimmt somit nur Verbindungen von der eigenen Maschine entgegen ... alles was sonst irgendwie ankommt wird ignoriert ... entweder auf die IP binden welche zum Internet (bzw. lokalem LAN) führt - oder - gleich an "0.0.0.0" binden (dann frist der Server auf allen Netzwerkverbindungen)

Rest ist einfach nur NAT & Portforwarding im Router

hand, mogel
 
bist du dir sicher mit deinen Erläuterungen (edit: auch wenn sie schon sehr überlegt klingen 😉 ) ?
zum einen liefert
Java:
public class Test {
    public static void main(String[] args)    throws Exception {
        DatagramSocket socket = new DatagramSocket(4445);
        System.out.println(socket.getLocalAddress());
    }
}
als Ausgabe bereits '0.0.0.0/0.0.0.0', welche du vorgeschlagen hast,
zum anderen steht in der Beschreibung
public DatagramSocket(int port, InetAddress laddr)
Creates a datagram socket, bound to the specified local address. [..] If the IP address is 0.0.0.0, the socket will be bound to the wildcard address, an IP address chosen by the kernel.

public DatagramSocket(int port)
Constructs a datagram socket and binds it to the specified port on the local host machine. The socket will be bound to the wildcard address, an IP address chosen by the kernel.
von lokal/ nicht lokal steht da wenig, mal abgesehen davon dass alles was nicht als Nachricht an fremde Rechner geht, sondern den eigenen Socket/ Port betrifft, als 'local' bezeichnet wird,

ich interpretiere das so dass der Default 0.0.0.0 ist, auf alles hört, warum sollte auf 127.0.0.1 eingeschränkt werden?
testen kann ich es freilich kaum

edit:
habe soeben noch verschiedene DatagramSocket angelegt, ob ohne oder mit "localhost", "127.0.0.1", "0.0.0.0" oder der IP aus ipconfig,
der DatagramSocket hat (unter Windows) immer "0.0.0.0/0.0.0.0" als Ausgabe und akzeptiert beliebige lokale Nachrichten,
hmm, das hilft wohl nicht weiter 😉
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben