Jetty Websocket服务器正在本地工作,但远程连接失败并出现错误"Host is down"如何解决?



我正在运行一个websocket服务器,使用嵌入式Jetty。

当我从同一台计算机(localhost(建立连接时,它按预期工作,但是当我尝试从另一台计算机连接时,出现错误"主机已关闭">(也称为EHOSTDOWN(。

日志显示 Jetty 正在侦听 0.0.0.0 地址,因此它应该接受来自任何地方的连接,并且所有协议都允许ufw端口(在此示例中为 12345(。我还尝试暂时禁用ufw但没有效果。

这是我的代码(这是一个简单的 websocket echo-server,我已经删除了所有不相关的内容(:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.websocket.api.WebSocketAdapter;
import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
import java.io.IOException;
public class EchoServerLauncher {
    static final int PORT = 12345;
    public static void main(String[] args) {
        startServer(PORT);
    }
    private static void startServer(final int port) {
        new EchoServer(port).startAndJoin();
    }
}
class EchoServer extends WebsocketServerBase {
    static final String PATH = "/hello/";
    public EchoServer(final int port) {
        super(port);
    }
    void startAndJoin() {
        super.startAndJoinWithServlet(new EchoServlet(), PATH);
    }
}
class EchoServlet extends WebSocketServlet {
    @Override
    public void configure(final WebSocketServletFactory factory) {
        factory.setCreator((req, resp) -> new EchoSocketAdapter());
    }
}
class EchoSocketAdapter extends WebSocketAdapter {
    @Override
    public void onWebSocketText(final String message) {
        super.onWebSocketText(message);
        if (message == null) return;
        try {
            getSession().getRemote().sendString(message);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
class WebsocketServerBase {
    private final int port;
    public WebsocketServerBase(int port) {
        this.port = port;
    }
    void startAndJoinWithServlet(WebSocketServlet servlet, String path) {
        final Server server = new Server();
        final ServerConnector connector = new ServerConnector(server);
        connector.setPort(this.port);
        server.addConnector(connector);
        final ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
        contextHandler.setContextPath("/");
        server.setHandler(contextHandler);
        final ServletHolder servletHolder = new ServletHolder(servlet.getClass().getSimpleName(), servlet);
        contextHandler.addServlet(servletHolder, path);
        try {
            server.start();
            server.dump(System.err);
            server.join();
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
    }
}

那么,什么会导致这样的问题呢?我什至不知道还有什么可以尝试的...

这是我的愚蠢,我忘了在客户端路由器上允许该端口。(太糟糕了,我无法删除关闭问题(。

最新更新