【问题标题】:Java Socket only works on "localhost" but not in private networkJava Socket 仅适用于“localhost”,但不适用于专用网络
【发布时间】:2014-02-05 10:27:53
【问题描述】:

我的 java 套接字程序有问题。 我在主机 A 上打开一个 ServerSocket。 在同一私有网络中的主机 B 上,我 尝试绑定到服务器,但总是超时。

主机 A |服务器 | IP:192.168.56.1
主持人乙 |客户 | IP:192.168.47.1

在服务器主机 A::

welcomeSocket = new ServerSocket(2323);
socket = welcomeSocket.accept();

打开那个serverSocket之后;在主机 B 上:

socket = new Socket("192.168.56.1", 2323);

然后几秒钟后,出现异常:

java.net.ConnectException: Connection timed out: connect

当我在主机 A 或 B 上启动服务器时,套接字运行良好 并输入“本地主机”。
这里有什么问题?感谢您的帮助。

【问题讨论】:

  • 您可以通过 ping 访问主机 a 吗?

标签: java sockets timeout localhost subnet


【解决方案1】:

如果您的子网掩码是 255.255.255.0(这是 C 类私有子网的标准),那么您的两台机器位于不同的子网中:

Host A | Server | IP: 192.168.56.1
Host B | Client | IP: 192.168.47.1

.56。和 0.47。作为操作元素。尝试将其中一个 IP 更改为 192.168.56.0/24192.168.47.0/24 即可。

或者,您需要在两个子网之间设置静态路由。

干杯,

【讨论】:

    【解决方案2】:

    setSoTimeout(int) 的 Javadoc 是这样说的:

    使用指定的超时启用/禁用 SO_TIMEOUT,以毫秒为单位。 将此选项设置为非零超时,调用 accept() 这个 ServerSocket 只会阻塞这段时间。如果 超时到期,但会引发 java.net.SocketTimeoutException ServerSocket 仍然有效。该选项必须在之前启用 进入阻塞操作生效。超时必须是 > 0. 超时为零被解释为无限超时。

    试试这个:

    welcomeSocket.setSoTimeout(0);

    在阻止服务器接受来自客户端的请求之前添加此语句。

    注意:确保两台机器都可以相互访问,以确保正确连接。

    【讨论】:

    • 由于 OP 声明它适用于 localhost,这很可能不是真正的延迟问题,但否则您的观点是正确的(但如上所述,无关紧要)。
    【解决方案3】:

    这通常意味着主机 A 上的传入端口 2323 未打开。
    所以主机 B 无法连接到主机 A 的 2323 端口。

    在 LAN 中,并非所有端口都打开。无法连接
    到您想要的任何端口上的任何机器(从您的 LAN)。

    从主机 B 试试这个:

    telnet 92.168.56.1 2323

    如果您无法以这种方式连接,那么您的客户端 java 程序
    也不会连接,这是正常的。

    然后您应该联系您的网络管理员。

    如果你可以这样连接,那么你应该看看
    以某种方式修复您的 Java 程序。

    【讨论】:

      【解决方案4】:

      谢谢你帮助我!

      我的程序现在运行良好。 感谢安德斯使用不同子网掩码的提示,我认识到 IP是错误的。查看 Windows 控制面板显示了一个不同的 IP 地址 对于主机 A。实际上它们在同一个子网掩码中。

      我更期待的是

      InetAddress.getLocalHost().getHostAddress()
      

      作为我的地址。
      那么如何在 java 程序中显示我的“真实”IP 地址?

      【讨论】:

        【解决方案5】:

        如果 IP 可达,则在 HOST 文件中添加一个条目

        【讨论】:

        • 主机文件连接 IP 和主机名 - 它与连接性完全无关!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-10
        • 2013-07-13
        相关资源
        最近更新 更多