【问题标题】:ServerSocket not binding to portServerSocket 未绑定到端口
【发布时间】:2013-01-27 15:22:21
【问题描述】:

我有一个服务器代码尝试根据给定的端口范围获取空闲端口 -

private ServerSocket allocatePort() throws IOException {
    ServerSocket server = null;
    for (int i=0; i<serverPortRange; i++) {
        int port = serverPort.intValue()+i;
        try {
            server = new ServerSocket(port);
            break;
        } catch (IOException e) {
            log.debug(String.format("DCServer could not allocate port %s", port));
        }
    }
    if (server == null) {
        throw new IOException();
    }
    return server;
}

当两台服务器在同一台机器上运行此代码时,它们会以某种方式获得相同的端口。我用netstat查看了是否真的获取到了,在占用端口列表中没有看到。

有什么想法吗?

谢谢, 关门

【问题讨论】:

  • 将代码中的第 6 行替换为以下 3 行: server = new ServerSocket(); server.setReuseAddress(true); server.bind(new InetSocketAddress("127.0.0.1", port));简单地使用 new ServerSocket(port) 在 JRE 版本和操作系统平台上不是很稳定。
  • 谢谢,我尝试了你的建议,但仍然没有限制端口。
  • 两个客户端是否同时运行此代码?如果是,那么没有任何一个客户端在日志中记录错误吗?因为同一台机器上的两个 ServerSocket 不能同时绑定到同一个端口。
  • 为什么客户端需要监听端口?那是为服务器准备的。
  • 设置reuseAddress=true与问题的表达意图相反,所以这不是一个答案。其余的都是废话。除非您想限制谁可以连接,否则不需要绑定到 127.0.0.1,这在问题中也没有提到,并且绑定到默认的 INADDR_ANY 非常“稳定”,这与您的说法相反。 -1

标签: java sockets port


【解决方案1】:

doc stateddoc stated

创建一个绑定到指定端口的服务器套接字。端口为 0 在任何空闲端口上创建一个套接字。

【讨论】:

  • 谢谢,我知道这个功能,但在这种情况下,我实际上有兴趣为服务器套接字提供一个特定的范围来尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多