Java: Anbindung an einen realen Server? (+ Portfreigabe)

setNewUser()

Mitglied
Hallo allerseits,

ich versuche gerade - und bewege mich dabei ein ganzes Stück über meinem (Anfänger-) Niveau - in Java ein kleines Programm zu schreiben, wo Server und Client (bisher jeweils eine Klasse) miteinander kommunizieren. Ich folge hierbei diversen Youtube-Tutorials. Toll wäre, wenn ich ein ganz kleines Chat-Programm hinbekommen könnte.
Aber ich komme momentan noch nicht einmal dahinter, wie die Server-Klasse mit einem echten Server in Kontakt treten könnte.
So sieht momentan die Server/Main-Klasse aus:

Java:
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerMain {

    public static void main (String[] args ){
        int port = 8818;
        try {
            ServerSocket serverSocket = new ServerSocket(port);
            while (true) {
                Socket clientSocket = serverSocket.accept();
                OutputStream outputStream = clientSocket.getOutputStream();
                outputStream.write("Hello Wolrd\n".getBytes());
                clientSocket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Ich habe bisher (sogar das ist für mich Neuland ^^) herausgefunden, dass ich den Port bei meinem Router freigeben muss.
Aber mir ist noch überhaupt nicht klar, wie nun meine Server-Klasse mit einem real existierenden Server (IP-Adresse) in Kontakt treten könnte.

Über eine kleine Hilfestellung würde ich mich sehr freuen. 🙂


Beste Grüße

Christian
 
Oh je, und es scheitert schon am Simpelsten (sollte ich doch ganz die Finger davon lassen ...), nämlich der Portfreigabe:

Ich brauche die dynamischen Ports, oder?

Sind auslösende Ports oder diese Umleitungen für mich relevant??

Und noch zwei Fragen:

Die Client Klasse (die dann am Ende wohl auf einem anderen Gerät läuft, denke ich ...) muss nicht denselben Port haben, oder?

Und was mich vor allem irritiert: Offenbar arbeiten sowohl Server als auch Client mit einem Port. Aber in der Realität wird man von einem Client ja wohl nicht ernsthaft eine Portfreigabe verlangen; wie wird das dann in echt gemacht?

Ich weiß, dass diese Fragen sehr dilettantisch sind. Ich würde mich aber sehr freuen, wenn sich trotzdem jemand meiner erbarmte! Tausend Dank!


LG Chris
 

Anhänge

  • Bildschirmfoto 2021-02-06 um 13.01.19.png
    Bildschirmfoto 2021-02-06 um 13.01.19.png
    529,9 KB · Aufrufe: 22
Du brauchst keine Portfreigaben. Portfreigaben brauchst du nur, wenn der Rechner, der die Verbindung aufbaut die Verbindung zu einem Rechner hinter dem Router aufbauen will.

Sprich, bei der Richtung Client => Server ist eine Portfreigabe nur auf Seite des Server notwendig, wenn der Server hinter einem Router steht. Deswegen betreibt man in der Regel Server mit einer öffentlichen IP und nicht hinter einem Router versteckt.
 
Hi, LimDul!

Ah vielen Dank, das leuchtet ein!

Brauche ich auch keine Portfreigabe, um mit der Server-Klasse auf meinem Rechner an den echten Server zu kommen? Denn immerhin will der Konstruktor des ServerSockets einen Port als Parameter entgegen nehmen.

Was mir aber tatsächlich weiterhin nicht klar ist: Wie kann meine Server-Klasse mit dem realen Server (den ich erst noch miete muss^^) korrespondieren? Hm...

Beste Grüße und einen schönen Tag! 🙂
 
Was ist eine "Server Klasse".?

Du lässt das Programm auf dem Server laufen und erstellst dann einen ServerSocket (wo du den Port angibt). Dadurch wird der Port erst aufgemacht und der Client kann sich dahin verbinden.

Ein Serversocket baut keine Verbindung auf, sondern lauscht auf eingehende Verbindungen.
 
Noch eine Frage ich:
Wie läuft das genau, dass man ein Programm auf einem Server startet, wenn man beispielsweise einen gemietet hat?
Lade ich das Programm auf den Server wie auf eine Festplatte und starte ihn dort mit einer Benutzeroberfläche oder einer Art Terminal?
In welcher Form muss sich ein Java-Programm befinden, um auf einem Server gestartet werden zu können? Als Projekt, als .jar ...?

Wenn das relativ einfach geht, lohnt sich für mich auf jeden Fall, mal einen zu mieten.
Danke euch! 🙂
 
In der Regel loggt man sich über ssh ein und hat dann eine Linux Konsole. Also ein Terminal. Dort startet man es im Zweifelsfall ganz normal wie auf einer Kommandozeile.

Problem ist natürlich, je nach dem was du mietest musst du auch selbst dafür sorgen, dass das Betriebssytem aktuell gehalten wird - sonst hast du ggf. schneller Untermieter als dir lieb ist, die dann Spam & Co verschicken.
 

Zurück
Oben