Java套接字仅适用于;“本地主机”;但不在专用网络中
我的java套接字程序有问题。 我正在打开主机a上的服务器套接字。 在同一个专用网络中的主机B上,I 尝试绑定到服务器,但我总是得到一个超时 主机A |服务器| IP:192.168.56.1Java套接字仅适用于;“本地主机”;但不在专用网络中,java,sockets,timeout,localhost,subnet,Java,Sockets,Timeout,Localhost,Subnet,我的java套接字程序有问题。 我正在打开主机a上的服务器套接字。 在同一个专用网络中的主机B上,I 尝试绑定到服务器,但我总是得到一个超时 主机A |服务器| IP:192.168.56.1 主机B |客户端| IP:192.168.47.1 在服务器主机A上: welcomeSocket = new ServerSocket(2323); socket = welcomeSocket.accept(); 在打开服务器套接字之后;在主机B上: socket = new Socket("192
主机B |客户端| IP:192.168.47.1 在服务器主机A上:
welcomeSocket = new ServerSocket(2323);
socket = welcomeSocket.accept();
在打开服务器套接字之后;在主机B上:
socket = new Socket("192.168.56.1", 2323);
几秒钟后,出现异常:
java.net.ConnectException: Connection timed out: connect
当我在主机A或主机B上启动服务器时,套接字工作正常
然后输入“localhost”这里怎么了?感谢您的帮助。这通常意味着主机A上的传入端口2323未打开。
因此,主机B无法连接到主机A上的端口2323 在局域网中,并非所有端口都打开。您无法连接
连接到任意端口上的任意计算机(从LAN) 从主机B尝试此操作:
telnet 92.168.56.12323
如果无法以这种方式连接,则客户端java程序也不会连接,这很正常 然后,您应该与网络管理员联系 如果您可以通过这种方式连接,那么您应该查看
以某种方式修复java程序。如果IP是可访问的,请在主机文件中添加一个条目。Javadoc表示: 使用指定的超时启用/禁用SO_超时,以毫秒为单位。 将此选项设置为非零超时时,调用 此ServerSocket将仅阻塞此时间。如果 超时过期时,会引发java.net.SocketTimeoutException ServerSocket仍然有效。此选项必须在启动之前启用 进入阻塞操作以产生效果。超时时间必须大于 0零超时被解释为无限超时 试试这个: welcomeSocket.setSoTimeout(0) 在阻止服务器接受来自客户端的请求之前添加此语句
注意:确保这两台机器可以相互访问以确保正确连接。如果您的子网掩码为255.255.255.0(这是C类专用子网的标准),则您的两台机器位于不同的子网上:
Host A | Server | IP: 192.168.56.1
Host B | Client | IP: 192.168.47.1
这一数字为0.56。47。作为操作要素。尝试将IP更改为192.168.56.0/24
或192.168.47.0/24
,您会没事的
或者,您需要在两个子网之间设置静态路由
干杯,谢谢你帮助我 我的程序现在运行良好。 多亏了Anders对不同子网掩码的提示,我认识到了这一点 IP是错误的。查看Windows控制面板,我发现了一个不同的IP地址 对于主机A。实际上,它们位于同一子网掩码中 我倒是很期待你给我的地址
InetAddress.getLocalHost().getHostAddress()
作为我的地址那么,我如何在java程序中显示我的“真实”IP地址呢?您可以使用ping访问主机a吗?主机文件连接IP和主机名-它与连接完全无关!因为OP声明它在
localhost
上工作,所以它很可能不是真正的延迟问题,但除此之外,您的观点是正确的(但如上所述,与此无关)。