Wie greife ich von außerhalb des LAN auf den Jetty-Server zu?

Wie greife ich von außerhalb des LAN auf den Jetty-Server zu?

Ich habe diese Frage ursprünglich auf Stackoveflow gepostet, mir wurde jedoch mitgeteilt, dass sie besser auf diese Site passt.

Ich versuche, von einem anderen Rechner außerhalb des LANs auf einen Jetty-Server zuzugreifen, der auf einem Rechner installiert ist, aber es funktioniert nicht. Ich habe gelesendieser Threadund folgte dem Rat von@Joakim Erdfeltes hat jedoch nicht funktioniert. Mein Code ist unten:

Server server = new Server();
    

    
// HTTP connector
ServerConnector serverConnector = new ServerConnector(server, 1, 1);
serverConnector.setHost("0.0.0.0"); <-
serverConnector.setPort(8080);
serverConnector.setIdleTimeout(30000);
    
    
 
 // Set the connector
 server.addConnector(serverConnector);

Ich habe versucht, von einem anderen Remoteserver mit dem folgenden Code auf den Server zuzugreifen:

String postUrl = "http://" + myIP + ":8080"; // myIP is set to the public IP address of Jetty Server

System.out.println("Post URL: " + postUrl);

RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(120 * 1000).build();



try (CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();) {

HttpPost httpPostRequest = new HttpPost(postUrl);

...

Dies löst jedoch die folgende Ausnahme aus:

HttpPostConnectException: Connect to 123.4.56.78:8080.. failed: Connection refused: connect

Was verursacht diesen Fehler? Ich habe den Firewall-Zugriff zugelassen, als ich dazu aufgefordert wurde, daher glaube ich nicht, dass es ein Firewall-Problem ist. Der Port 8080wird auch für keinen anderen Prozess verwendet. Ich habe mehrere Ports ohne Erfolg ausprobiert.

Danke

Antwort1

Ich werde einige meiner Empfehlungen in eine Antwort verschieben. Ihnen fehlen grundlegende Netzwerkkenntnisse. Bitte versuchen Sie, sich ein wenig darüber zu informieren (Hierzum Beispiel). Einige Grundlagen:

  • Lokale IPs (Netzwerke 192.168.xx, 10.xxx usw.) sind vom Internet aus nicht erreichbar, nur das Gerät, das direkt mit Ihrem Internetanbieter verbunden ist (Ihr Heimrouter), ist direkt vom Internet aus erreichbar.
  • Wenn Sie mit Ihrem Heimrouter verbunden sind und im Internet surfen, passieren mehrere Dinge: Da Ihre lokale IP vom Internet aus nicht erreichbar ist, verbirgt Ihr Heimrouter Ihre lokale IP und ersetzt sie durch Ihre öffentliche IP. Anschließend merkt sich der Router die Verbindung, um eine Antwort verarbeiten zu können. Wenn eine Antwort eintrifft, wird derselbe Vorgang umgekehrt: Wenn der Router in seiner Tabelle eine passende Verbindung für das eingehende Paket findet, wird die öffentliche IP durch Ihre private IP ersetzt und die Antwort an das richtige Gerät in Ihrem Netzwerk weitergeleitet. Dieser Vorgang wird aufgerufenNAT(Netzwerkadressübersetzung)
  • NAT ist ein Schutz für Ihre Geräte in Ihrem Heimnetzwerk (Ihre Geräte können das Internet erreichen, aber das Internet kann Ihre Geräte nicht erreichen!) - es macht es aber auch schwierig, wenn Sie möchten, dass ein Gerät aus Ihrem Heimnetzwerk vom Internet aus erreichbar ist. Das liegt daran, dass Ihr Router bei jedem eingehenden Datenpaket wissen muss, was damit zu tun ist. Und die Vorgabe ist: Wenn kein Gerät in Ihrem Heimnetzwerk diese Verbindung geöffnet hat, wird das eingehende Datenpaket verworfen!

Jetzt sollte klar sein, warum du mehrere IPs hast: Google kann nur deine öffentliche IP sehen. Damit dein Jetty-Server vom Internet aus erreichbar ist, brauchst duPort-Weiterleitung. Im Grunde erstellen Sie eine Regel in Ihrem Heimrouter "Leiten Sie jedes TCP-Paket, das Sie auf Port 8080 empfangen, an das interne Gerät XY weiter". Wie das geht, müssen Sie in Ihrem Routerhandbuch nachlesen, die meisten Router haben eine Weboberfläche zur Konfiguration. Ich hoffe, das klärt Ihre Verwirrung ...

verwandte Informationen