# Java Socket und ServerSocket über Internet-IP?



## Tho82 (16. Sep 2008)

Hi,

also ich versuche mich grad ein wenig mit Socket und ServerSocket. Innerhalb meines Netzwerks (192.168....) funktioniert die übertragung bestens. Versuche ich jetzt aber meine Internet-IP einzugeben (http://www.wieistmeineip.de/), dann funktioniert die Übertragung nicht. Ich höre dabei mit meinem ServerSocket den Port 80 ab, welcher ja normal selbst hinter einem Router frei ist. Warum funktioniert es nciht, ich denke es ist ein Verständnisfehler.

Gruß Tho


----------



## musiKk (16. Sep 2008)

Tho82 hat gesagt.:
			
		

> Ich höre dabei mit meinem ServerSocket den Port 80 ab, welcher ja normal selbst hinter einem Router frei ist.


Das bezweifle ich mal ganz stark. Ohne dass du den Port selbst freigibst, sollte jeder Port geschlossen sein.

Überhaupt ist relativ unklar, wo das Problem ist und was du vor hast. Vielleicht kannst du mal etwas Code zeigen, was du denkst, was er tun sollte und was er wirklich tut.


----------



## HoaX (16. Sep 2008)

d.h. du gibst im cleitn als ip des servers die deines routers an? klar geht das nicht. wenn jetzt bei dir im netzwerk zwei rechner stehen auf denen ein server läuft, woher soll das der router wissen, und vorallem zu welchem soll er weiterleiten. -> du musst dem router fest sagen welche daten er wohin leiten soll wenn diese direkt an ihn adressiert sind


----------



## Tho82 (16. Sep 2008)

musiKk hat gesagt.:
			
		

> Tho82 hat gesagt.:
> 
> 
> 
> ...



Also ich schildere mein Problem genauer:

Ich habe einen Rechner A. Auf diesem habe ich einen ServerSocket implementiert, der einfach auf einkommende Daten wartet und diese auf der Konsole ausgibt. Auf Rechner B habe ich einen Socket implementiert, der dem Server A einen String (umgewandelt in byte[]) senden soll. 

Beide Rechner sind in einem internen Netzwerk miteinander verbunden. Die Kommunikation über die interne IP (192.168...) und den Port 80 funktioniert, der Server gibt mir den gesendeten String aus. Was ich jetzt gerne haben will, ist dass die Kommunikation nicht über das interne Netzwerk läuft, sondern über 2 im Internet verbundene Rechner. Deshalb habe ich versucht, meine IP über wieistmeineip.de herauszufinden und die Verbindung über diese IP und den Port 80 herzustellen. Dies hat leider nicht funktioniert. Woran liegt das?


----------



## Guest (16. Sep 2008)

HoaX hat gesagt.:
			
		

> d.h. du gibst im cleitn als ip des servers die deines routers an? klar geht das nicht. wenn jetzt bei dir im netzwerk zwei rechner stehen auf denen ein server läuft, woher soll das der router wissen, und vorallem zu welchem soll er weiterleiten. -> du musst dem router fest sagen welche daten er wohin leiten soll wenn diese direkt an ihn adressiert sind



Naja das ist die Frage. Wird bei "wieistmeineip.de" die IP des Rechners angezeigt, oder zeigt es mir da die IP meines Routers an?


----------



## musiKk (16. Sep 2008)

Bei wieistmeineip.de wird die IP des Routers angezeigt. Wenn du willst, dass der Router auf meinetwegen Port 80 ankommende Daten an Rechner A weiterleitet, musst du ihm das sagen (nennt sich Port Forwarding).


----------



## Guest (16. Sep 2008)

musiKk hat gesagt.:
			
		

> Bei wieistmeineip.de wird die IP des Routers angezeigt. Wenn du willst, dass der Router auf meinetwegen Port 80 ankommende Daten an Rechner A weiterleitet, musst du ihm das sagen (nennt sich Port Forwarding).



hehe okay.. also wenn ich sowas wie ICQ implementieren will, ein Messaging System, dann brauch ich irgendwo nen zentralen Server im WWW, und clients, die immer und immer wieder abfragen, ob neue nachrichten da sind? ANsonsten funzt das Messaging ja hinter einem Router nicht?!?


----------



## musiKk (16. Sep 2008)

Die müssen nicht unbedingt immer wieder nachfragen. Wenn der Client die Verbindung zum Server aufgebaut hat, dann ist bidirektionale Kommunikation ja möglich.

Aber davon abgesehen ja: Du brauchst irgendwo zentral etwas.


----------



## Gast (13. Nov 2008)

Hallo!
habe ein ganz ähnliches Problem. wie mache ich das wenn ich hinter einem router 2 clients an 2 verschiedenen rechnern habe. der router horcht auf dem port 1986, wie kann ich es dann an den richtigen client weiterleiten?
MfG


----------



## tuxedo (13. Nov 2008)

Clients hinter dem router -> kein Portforwarding oder sonst eine Einstellung nötig
Server hinter dem Router -> Portforwarding nötig. Ohne dies weißt der Router nicht "für welchen der Rechner hinter dem Router ist das Paket XYZ welches an Port ABC eingegangen ist".

Und noch eins: "Router horchen nicht auf Ports". Server "horchen" auf Ports. Router haben ledicglich die aufgabe, Datenpakete korrekt von A nach B zu leiten.

Wenn ein Client, durch einen Router hindurch schon eine Verbindung zum Server aufgebaut hat (eine AUSGEHENDE Verbindung), dann hat der Router intern seine Tabelle mit "Welcher Port von welcher IP kommuniziert mit welcher anderen IP mit welchem anderen port" aufgebaut. D.h. du musst da gar nix mehr machen. Geht "einfach so". Wenn du mehr wissen willst, schau hier: 

http://de.wikipedia.org/wiki/Network_Address_Translation

und hier:

http://de.wikipedia.org/wiki/Port_Forwarding

- Alex


----------

