java 中 jetty 仅监听 IPv4 的写法

在 Jetty 中,如果希望 ContextHandler 或 WebSocket 服务 仅监听 IPv4(禁用 IPv6) 

强制 Jetty 绑定到 IPv4 地址(0.0.0.0)

在创建 Server 实例时,明确指定监听的 Host 为 0.0.0.0(IPv4 通配地址) 

代码示例

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;

public class JettyIPv4Example {
    public static void main(String[] args) {
        // 创建 Server,不指定端口(后续通过 ServerConnector 配置)
        Server server = new Server();

        // 创建一个 ServerConnector,绑定到 IPv4 的 0.0.0.0
        ServerConnector connector = new ServerConnector(server);
        connector.setHost("0.0.0.0");  // 关键点:强制 IPv4
        connector.setPort(8080);       // 设置监听端口

        // 将 Connector 添加到 Server
        server.addConnector(connector);

        // 设置 ContextHandlerCollection 
        ContextHandlerCollection contexts = new ContextHandlerCollection();
        ContextHandler contextHandler = new ContextHandler();
        contextHandler.setContextPath("/chat");
        contextHandler.setHandler(new com.joincall.j3c.JoinCallCC.AgentWebSocketHandler());
        contexts.addHandler(contextHandler);

        server.setHandler(contexts);

        // 启动服务
        try {
            server.start();
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

说明:

1. ServerConnector.setHost("0.0.0.0")
    强制 Jetty 监听所有 IPv4 地址,避免绑定到 ::(IPv6)。

2. 如果未设置 host,Jetty 默认可能同时监听 IPv4 和 IPv6。

posted @ 2025-05-13 11:07  海乐学习  阅读(37)  评论(0)    收藏  举报