# Allgemeines zum Thema Nezwerke mit Java



## manuche (15. Jan 2008)

Hallo!
Ich habe mich ein wenig in die Thematik eingelesen und auch schon nen kleines Client-Server-Modell für ein lokales Netzwerk gebastelt... War auch kein Problem und funktioniert auch alles wunderbar!
Nur wie läuft eine Verbindung über Sockets ab, wenn der Server hinter einem Router steckt und der Client übers Inet connecten soll... Mit InetAddress.getLocalHost() konnte ich mir auf Arbeit meine Adresse im Inet anzeigen lassen, die ich ja zwangsläufig für ein Server-Client-Modell ausserhalb der LANs brauche... Jetzt hab ich das ganze zu Hause ausprobiert und habe nur die lokale IP rausbekommen! Wie kann ich nun an die IP-Addresse vom Router kommen damit ich so einen inetfähigen Server erstellen kann?
Naja vielleicht versteh ich das ganze ja auch nur nich so wirklich also belehrt mich bitte! 
und sorry wenns sowas hier schon gibt aber aus den posts die ich gelesen hatte konnte ich nich so wirklich die quintessenz ziehen! -.-
mfg


----------



## tuxedo (16. Jan 2008)

Das Zauberwort heisst "Portforwarding". Du musst deinem Router sagen: "Alles was an der Internet-IP an Port XYZ ankommt, muss an die interne IP w.x.y.z an Port ABC weitergeleitet werden". Deine Java-Server-Anwendung musst du deshalb übrigens nicht irgendwie besonders anpassen. Die bleibt davon unberührt und ist quasi identisch mit einer "lokalen" server-version.

Damit die Clients die auf den Server zugreifen wollen nicht alle 24h eine neue IP gesagt bekommen müssen, kannst du auf diverse dynamische DNS Dienste zurückgreifen. Diese verbinden die ständig wechselde dynamische IP die du von deinem Provider bekommst mit einer immer gleichen Namensadresse. Ich bin z.B. bei www.dyndns.com ... Dort gibts Adressen im Stil von <meinname>.homelinux.org ... Alles nach <meinname> kannst du aus einer recht großen Liste von Adressen aussuchen. Der Dienst ist übrigens weitgehend kostenlos.

- Alex

P.S. das ist übrigens ein Java unabhängiges Thema ... ;-)


----------



## manuche (17. Jan 2008)

Ach so, gut! Klingt ja relativ einleuchtend... Das mit den dynamischen DNS Diensten ist für mich erstmal zu viel des Guten! Bestimmt eine tolle Sache nur würde ich das Server Client Modell später gerne in ein Minigame einbinden!
Eine Anwendung mit Button für "Server erstellen" und einen anderen um einem Spiel zu joinen! Quasi Client und Server in einem, je nach dem wie mans grade brauch! Deswegen wäre es für mich wichtig, an die IP-Adresse ausm Inet zu kommen wenn das überhaupt möglich ist...
Ach ja: Ist das Portforwarding nich auch anders möglich? BT-Clients können doch auch empfangen wenn kein Port frei ist, oder vertue ich mich da (zwar nur langsam aber das spielt keine Rolle bei nem Minigame)?


----------



## tuxedo (17. Jan 2008)

Manche Filesharing-Clients beherrschen zum Teil UPNP. Damit können sie einem UPNP fähigen Router beibringen einen bestimmten Port zu forwarden (Azureus macht das beispielsweise). Wenn der Router das nicht kann, dann kommen die eingehenden Daten über exakt die gleiche Verbindung rein, die der Client nach außen hin geöffnet hat. Das heisst aber auch, dass die Daten über den Server müssen. D.h. das stresst den Server. Und damit der Server nicht in die Knie geht, tut er die Daten nur mit einer geringen Priorität an den Client weiterschicken. 

Glaube du solltest dich mal grundlegend in TCP/IP einlesen ...

Es ist blödsinn vom Java-Programm aus an die eigene Inet-IP zu kommen. Was willst du denn damit?

Annahme A:

Benutzer A macht bei sich hinter dem Router einen Server auf (wofür er ja auch ein Port-Forwarding einrichten muss).  Benutzer B, der _irgendwo_ im Internet sitzt, will sich mit dem Server von Benutzer A verbinden.

Quizfrage: An welcher Stelle, Benutzer A oder Benutzer B, macht es jetzt Sinn die eigene, öffentliche IP zu wissen? Antwort: Nirgends.

Denn wenn Benutzer B auf dem Server von Benutzer A spielen will, dann muss B bei sich entweder die IP oder den dyndns-Namen des Servers von Benutzer A geben lassen. Die kann er nicht ohne weiteres "ermitteln". Wie denn auch. Könnte ja 1000 solcher Server geben. Benutzer A muss also mit Benutzer B sprechen und sagen "hörz zu, meine IP/DynDns-Adresse lautet wie folgt ...".

So, und jetzt zum Nutzen des DynDNS Dienstes:

Wenn Benutzer A seinen Server am Montag, Dienstag, Mittwoche, ... laufen lassen will und er möchte, dass an jedem Tag Spieler drauf können, dann muss er entweder jeden Tag seinen Spielern seine aktuelle öffentliche IP mitteilen (denn die ändert sich spätestens nach 24 Stunden bei einem "normalen" INternetzugang), ODER er registriert sich eine DynDNS Adresse die er selbst (bzw. sein Router) immer up2date hält. Die Spieler brauchen dann in Zukunft nur noch die DynDNS Adresse. 

- Alex


----------



## manuche (17. Jan 2008)

Ok alles klar... Hab mir nur gedacht, dass wenn jemand einen Server erstellt, und die Seite wieistmeineip.de (oder ähnliche) z.b. nicht kennt weiss er evtl nich wie er an seine öffentliche IP im Inet kommt... Was darauf hinauslaufen würde, dass er seinem Gegenüber nicht sagen kann auf welche IP er connecten soll!
Aber wenn eh kein Weg drum rum führt dann muss ich halt wohl in den sauren Apfel beissen... Das mit dem Server laufen lassen ist auch unrealistisch denk ich! Eine Partie von dem Spiel dauert vllt ne halbe Stunde und ich glaube kaum das 2 Leute 48 Partien zocken... xD
Aber ich verstehe worauf du hinaus willst!
greetz


----------



## tuxedo (17. Jan 2008)

Naja, du kannst ja auch mit deinem Server-Programm die www.wieistmeineip.de Seite öffnen und die IP-Adresse aus dem Seitentext rausparsen. Dann hast du sie. Da man aber eh ein Portforwarding einrichten muss (außer du schaffst es UPNP in deinen Server mit rein zu basteln [ist wohlmöglioch nur was für fortgeschrittene, habs noch nicht getestet]), kann man auch gleich im Router nach der IP schauen...

- Alex


----------



## manuche (17. Jan 2008)

Alles klar!! Hab nur an die Benutzerfreundlichkeit gedacht... ^^
Vielen Dank für Hilfe und Geduld!


----------

