Hoo*_*oli 5 java jboss nio2 wildfly undertow
我正在测试 undertow 2.0.0.Alpha1 网络服务器。Hello World当我在本地运行它时,它可以工作并在我转到 时返回localhost:80。然后我将网络服务器部署在远程服务器上并访问,remote_ip:80但没有得到任何响应。如果我curl -i -X GET http://localhost:80在远程服务器上运行,那么我Hello World也会返回。所以服务器肯定正在运行,但由于某种原因无法通过远程 IP 地址访问。如果我尝试在代码中将主机名设置为远程 IP(即.addHttpListener(80, "remote.ip")),那么我会得到一个BindException.
import io.undertow.Undertow;
import io.undertow.server.HttpHandler;
import io.undertow.server.HttpServerExchange;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class HelloWorldServer {
public static void main(final String[] args) {
try {
Runtime.getRuntime().exec("sudo fuser -k 80/tcp");
} catch (IOException ex) {
Logger.getLogger(HelloWorldServer.class.getName()).log(Level.SEVERE, null, ex);
}
Undertow server = Undertow.builder()
.addHttpListener(80, null)
.setHandler(new HttpHandler() {
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
exchange.getResponseSender().send("Hello World");
}
}).build();
server.start();
}
}
Run Code Online (Sandbox Code Playgroud)
有什么线索吗?
第二个参数addHttpListener(80, null)是主机。您需要在其中输入主机名或 IP,以使其侦听公共 IP。使用null它只会绑定到本地主机。
0.0.0.0如果您想绑定到所有地址,请尝试绑定到公共IP或绑定到。
Undertow server = Undertow.builder()
.addHttpListener(80, "0.0.0.0")
.setHandler(new HttpHandler() {
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
exchange.getResponseSender().send("Hello World");
}
}).build();
server.start();
Run Code Online (Sandbox Code Playgroud)