Wie kann ich eine Client Server Verbindung in Java aufbauen?
Hallo,
ich habe einen Server auf einem VPS installiert, der auf den Port 1234 für eingehende Pakete wartet.
Ich habe einen Client auf meinem Desktop gestartet, der ein Paket an diesen Server sendet. Wenn der Server das Paket empfängt, sendet er ein Bestätigungspaket zurück an den Client.
Die Verbindung wird mit einem Socket und einem SocketServer abgewickelt. Wenn ich das Bestätigungspaket auf dem Client vom Server erhalten möchte, muss ich z.B. einen ServerSocket auf dem Port 4321 öffnen.
Wird das nicht von der Firewall blockiert, weil der Port nicht geöffnet ist? Oder kann Java von sich aus einen Port öffnen?
1 Antwort
Java kann auf einem Port lauschen oder Pakete an einen Port versenden.
Bei beidem kann die Firewall dazwischenfunken, je nach Konfiguration. Ebenfalls kann es sein, dass der Port bereits durch eine andere Applikation besetzt ist.
Wenn du das Problem schilderst könnte ich dir deine Frage evtl. beantworten.
Wenn es darum geht, dass die lokale Firewall verhindert, dass der Server seine Verbindung auf einen nicht slebst geöffneten Port aufbaut, dann kann man das umeghenen ähnlich, wie das beim Passive-Mode von FTP der Fall ist, dass der Server dem Client sagt, welchen Port dieser verwenden soll und dann der Client die Verbindung aufbaut.
Reverse-SSH funktioniert wohl ähnlich.
Im Grunde ist es sowas. Wenn man ein Online Computer Spiel spielen möchte, öffnet der User ja auch nicht manuell einen Port.
Bei meinem Programm handelt es sich um ein Spiel, das mit Java programmiert wurde. Dort soll ein Lizenzsystem eingebaut werden.
Die Idee ist, dass jede 30 Sekunden ein Paketaustausch des Servers mit dem Client passiert, in dem überprüft wird, ob die Lizenz existiert, der User gebannt oder die Lizenz ausgelaufen ist. In beiden Fällen wird der Client im schlimmsten Fall einen Sperrscreen mit dem Grund beim erneuten Start des Spiels sehen und weiter als das wird man nicht kommen.
- Der einfache Part ist der Weg vom Client zum Server. Ich kann beim Server ganz einfach einen beliebigen Port öffnen und den im Client fest hinterlegen. Der Client sendet das Paket an den Server.
- Sobald der Server das Paket erhält, soll dieser ein Paket zurück an den Client mit den Lizenzinformationen senden. Dieser Part wird aber schwieriger, da der Port nicht einfach fest in den Server geschrieben werden kann, da nicht jeder User diesen Port freigeschaltet hat. Hier fehlt im Grunde die Lösung
Du baust dir ein Scoket und arbeitest darüber. Eventuell nutzt du das erste Socket auch nur zum verbindungsaufbau, weist dem Client einen Port zu, über den er sich für das eigene Verbindungssocket an den Server wenden soll.
Über das Socket hast du dann Input- und OutputStream.
Es gab auch irgendwie Sockets und ServerSockets, was da genau der Unterschied ist weiß ich aber gerade nicht.
Okay, ServerSocket ist für die Serverseite ausgelegt, Socket für die Clieneite.
Ein Freund nannte mir den Begriff Reverse SSH, kann das die Lösung sein?