我最初在 stackoveflow 上发布了这个问题,但被告知它更适合这个网站。
我正在尝试从 LAN 外的另一台机器访问部署在一台机器上的 Jetty 服务器,但它不工作。我已经阅读了这个帖子并遵循了@Joakim Erdfelt提供的建议,但是它没有用。我的代码如下:
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
也未用于任何其他进程。我尝试了多个端口无济于事。
谢谢
我会将我的一些建议移至答案。您缺少基本的网络知识,请尝试阅读一些内容(例如此处)。一些基础知识:
现在应该清楚了,为什么您有多个 IP:Google 只能看到您的公共 IP。为了让您的码头服务器可以从互联网访问,您需要端口转发。基本上,您将在您的家庭路由器中创建一个规则“将您在端口 8080 上收到的每个 TCP 数据包转发到内部设备 XY ”。您需要查看路由器手册以了解如何执行此操作,大多数路由器都有用于配置的 Web 界面。我希望这能消除你的困惑......