gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:24 25 4
gpt4 key购买 nike

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

当我从同一台机器 (localhost) 建立连接时它按预期工作,但是当我尝试从不同的机器连接时,我收到错误“主机已关闭”(也称为EHOSTDOWN).

日志显示 Jetty 正在监听 0.0.0.0 地址,因此它应该接受来自任何地方的连接,并且 ufw 允许端口(在本例中为 12345) > 适用于所有协议(protocol)。我也试过暂时禁用 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);
}
}
}

那么,是什么导致了这样的问题?我什至不知道还有什么可以尝试的……

最佳答案

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

关于java - Jetty Websocket 服务器在本地工作,但远程连接失败并出现 "Host is down"错误,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35138505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com