【问题标题】:Java client socket returns connection timedout exceptionJava 客户端套接字返回连接超时异常
【发布时间】:2015-04-11 08:19:30
【问题描述】:

我从 JAVA 网络编程开始。我写了一个服务器类,它使用 ServerSocket 来监听 3333 端口。下面是代码 sn-p。

try {
            servSock = new ServerSocket(portNumber);
            //servSock.setSoTimeout(100000);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Socket link = null; //Step 2.

        while(true){
            try {
                link = servSock.accept();

这很好用,因为接受调用会正确阻止程序。

但是当我通过客户端从同一台机器连接到同一个端口时,使用下面的代码

Socket link = new Socket();
link.connect(new InetSocketAddress(InetAddress.getLocalHost(),3333), 50000);

它会在一段时间后抛出 ConnectionTimedout。

我无法连接到服务器!。请帮助某人。

【问题讨论】:

  • 尝试打印InetAddress.getLocalHost() 的值。也尝试用localhost替换InetAddress.getLocalHost()
  • 哇,好用! :) 现在已经为此苦苦挣扎了 3 个小时。非常感谢:)
  • InetAddress.getLocalhost 有什么问题?至少在许多教程文本中是这样的。
  • 我在回答中提到了解决方案和解释。请接受!谢谢

标签: java sockets


【解决方案1】:

尝试将InetAddress.getLocalHost() 替换为localhost

原因是InetAddress.getLocalHost() 实际上返回了机器的主机名,以及与该主机名关联的 IP 地址。

如上所述here

InetAddress.getLocalHost() 并没有像大多数人认为的那样做。它实际上返回机器的主机名,以及与该主机名关联的 IP 地址。这可能是用于连接外部世界的地址。它可能不会。这仅取决于您如何配置系统。

InetAddress.getLocalHost() 的 javadoc 提到了here

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2019-10-21
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 2011-07-31
    • 2017-06-01
    相关资源
    最近更新 更多