Сервер Jetty Websocket работает локально, но удаленные подключения терпят неудачу с ошибкой "Хост вниз", как ее исправить?

Я запускаю сервер websocket, используя встроенный Jetty.

Он работает по назначению, когда я делаю подключения с одного и того же компьютера (localhost), , но когда я пытаюсь подключиться с другого компьютера, я получаю сообщение об ошибке "Host down" (также известный как EHOSTDOWN).

Журналы говорят, что Jetty прослушивает адрес 0.0.0.0, поэтому он должен принимать соединения повсюду, а порт (в этом примере 12345) разрешен в ufw для всех протоколов. Я также попытался временно отключить ufw, и это не повлияло.

Это мой код (это простой эхо-сервер websocket, я удалил все, что не имеет значения):

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

Итак, что может вызвать такую ​​проблему? Я даже не знаю ничего другого, чтобы попробовать...

Ответ 1

Это была моя глупость, я забыл разрешить этот порт на моем сервере клиента. (Слишком плохо, я не могу удалить закрыть вопрос).