Client und Server über das Internet verbinden


#1
Hallo,
Ich weiß nicht ob das der Richtige Abschnitt dafür ist aber ich schreibe die Frage trotzdem mal hier auf.
Also, Ich würde gerne einen Client und einen Server in Form zwei verschiedener Programme erstellen,
welche sich über das Internet miteinander verbinden und Daten austauschen können.
Ich habe schon danach gesucht auch was gefunden.
Nämlich hier: https://systembash.com/a-simple-java-tcp-server-and-tcp-client/
Das funktioniert auch in meinem Netzwerk aber ich würde gerne wissen ob man das irgendwie hinbekommen
kann, dass das auch übers Internet funktioniert?
Wie gesagt Ich weiß nicht ob das der Richtige Abschnitt dafür ist.
Ich hoffe mir kann jemand erklären wie das funktioniert :)
 
#2
Hi

vom Java-Code her gibt es eigentlich keinen Unterschied.

Die üblichen Probleme (mit IPv4) sind a) Firewalls und b) NAT

Firewalls:
Sind, kurz gesagt, Programme, um Verbindungen nach bestimmten Kriterien zu blocken (aus Sicherheitsgründen). FWs gibts eingebaut in Betriebssystemen (zB. Windows), und/oder als unabhängige Programme zum dazuinstallieren, und/oder auch in vielen Routern eingebaut.

Die meisten FWs können nur anhand der Portnummern und eingehend/ausgehend entscheiden (also ob man selber Server oder Client ist). Die üblichen Anfangseinstellungen sind, alle ausgehenden (Client-artigen) Verbindungen zu erlauben, aber alle Serverdienste am eigenen Computer von außen unerreichbar zu machen. Außer eben, wenn man auf Serverseite die Portnummer explizit freigibt (oder alle eingehenden Verbindungen erlaubt, was aber nicht ratsam ist)

Die Windows-Firewall, falls der Server auf Windows läuft, sollte bei Programmstart nachfragen ob es erlaubt werden soll. Wie Routerfirewalls einzustellen, falls der Server nicht direkt am Internet hängt, hängt vom Routermodell ab, wenn Hilfe benötigt wird bitte das Modell angeben. Andere selbst installierte FWs solltest du vermutlich selbst kennen, wenn du welche installiert hast.

(Je nach Einstellungen kann natürlich auch der Client am Clientcomputer geblockt werden, aber das passiert normalerweise nur, wenn man es selber so einstellt. Wie gesagt, die üblichen Anfangseinstellungen erlauben alle ausgehenden Verbindungen. Und bessere FWs können auch je nach übertragenen Daten blocken/erlauben, nicht nur nach Ports, aber wenn man sowas hat weiß man es vermutlich auch)

NAT (IPv4):
Wieder mal sind Router das Problem.
Was eine IP-Adresse prinzipiell ist, ist vermutlich klar (?)
Problem ist, wenn man daheim einen Router mit einem/mehreren Computern hat bekommen die vom Router daheim eine interne/private IP (10.*.*.*, 172.16.*.*, 192.168.*.* sind ein paar dafür gedachte Nummernbereiche), und haben keine "öffentliche", die vom globalen Internet aus erreichbar ist. Nur der Router selber hat eine öffentliche.

Bei Kommunikation von zwei Rechnern innerhalb vom selben privaten Netz, also am selben Router, stört das nicht.

Wenn einer deiner Rechner der Client ist, und der Server aber irgendwo "außen", fragt dein Client eigentlich den Router, dass der doch bitte beim Server anfragen soll, statt das direkt zu machen. Der Router bekommt die Antwort vom Server, und hat sich noch gemerkt welcher seiner Rechner die Anfrage gestellt hat, und kann die Antwort daher wieder zum richtigen Empfänger zurückschicken. Etwas umständlich, aber auch kein Problem.

Wenn der Server aber in einem privaten Netz ist, und der Client außerhalb (bzw. nicht im selben)... Eine Clientanfrage kommt irgendwo aus dem weiten Internet zum Serverrouter (nur zum Router), und dieser hat keien Ahnung, zu welchem seiner Rechner die Anfrage jetzt weitergeleitet werden soll (weil es ja erst der Anfang der Verbindung ist, es gab vorher nichts zum merken, und die Anfrage hat nur die Router-IP).
Deshalb muss man hier ein sog. "Port Forwarding" beim Router einstellen (falls es eben einen gibt, beim Server), und zwar dass Anfragen für Port x an die interne IP y weitergeleitet werden sollen. Falls Hilfe benötigt, bitte wieder Routermodell (oder Screenshots von der Einstellungsseite, oder...)

Es gibt noch zwei damit verbundene Probleme:

a) Bei den meisten privaten Internetzugängen hat man keine fixe IP, die ändert sich immer wieder mal. Wenn sich die Server-(Router)-IP immer ändert muss der Client immer die aktuelle IP von irgendwoher erfahren. Fixe IPs gibts üblicherweise nur gegen Aufpreis.
Man kann sich, statt Heimbetrieb, auch einen Server bei irgendeinem Hoster mieten, die haben alle schon fixe IPs). EIne weitere Möglichkeit wären DynDNS-Anbieter.

b) Manche Billiganbieter geben einem für daheim nicht mal eine öffentliche IP, egal ob fix oder ändernd. Also deine Computer haben eine private IP innerhalb deines Heimnetzes, und dein Router hat eine private IP innerhalb des Anbieternetzes. Und das Gerät mit der richtigen öffentlichen IP steht irgendwo beim Anbeiter und kann von dir kein Portforwarding eingestellt bekommen.
In dem Fall kann man nur Anbieter wechseln
 
Zuletzt bearbeitet: