如何從外部區域網路存取Jetty伺服器?

如何從外部區域網路存取Jetty伺服器?

我最初在 stackoveflow 上發布了這個問題,但被告知它更適合這個網站。

我正在嘗試從 LAN 外部的另一台電腦存取部署在一台電腦上的 Jetty 伺服器,但它不起作用。我讀了這個線程並遵循了提供的建議@喬金·埃爾德費爾特然而它不起作用。我的程式碼如下:

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);

我嘗試使用以下程式碼從另一台遠端伺服器存取伺服器:

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);

...

但是,這會引發以下異常:

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

是什麼導致了這個錯誤?我在出現提示時允許防火牆訪問,因此我認為這不是防火牆問題。該連接埠8080也未用於任何其他進程。我嘗試了多個連接埠都沒有成功。

謝謝

答案1

我會將我的一些建議轉移到答案中。您缺少基本的網路知識,請嘗試閱讀一些相關知識(這裡例如)。一些基礎知識:

  • 本地 IP(網路 192.168.xx、10.xxx 等)無法從網路訪問,只有直接連接到您的網路供應商(您的家庭路由器)的裝置才能從網路直接存取。
  • 當您連接到家庭路由器並瀏覽網路時,會發生以下情況:由於無法從網路存取您的本機 IP,因此您的家庭路由器會隱藏您的本機 IP,並將其替換為您的公用 IP。執行此操作後,路由器會記錄連線以便能夠處理回覆。當回復到達時,相同的過程將相反:如果路由器在其表中找到傳入資料包的匹配連接,則公用 IP 將替換為您的私人 IP,並且回復將被轉送到網路內的正確裝置。這個過程稱為網路位址轉換網路位址解讀
  • NAT 是對家庭網路內設備的保護(您的設備可以訪問互聯網,但互聯網無法訪問您的設備!) - 但如果您希望訪問家庭網絡中的設備,這也會變得困難來自網絡。這是因為您的路由器必須知道如何處理每個傳入的封包。預設值是:如果家庭網路內沒有設備打開該連接,則傳入的資料包將被丟棄!

現在應該很清楚了,為什麼你有多個 IP:Google 只能看到你的公開 IP。為了可以透過網路存取您的碼頭伺服器,您需要轉送連接埠。基本上,您將在家庭路由器內建立一條規則“將連接埠 8080 上收到的每個 TCP 封包轉送到內部設備 XY「。您需要檢查路由器手冊以了解如何執行此操作,大多數路由器都有用於配置的網路介面。我希望這能消除您的困惑...

相關內容