Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java套接字仅适用于;“本地主机”;但不在专用网络中_Java_Sockets_Timeout_Localhost_Subnet - Fatal编程技术网

Java套接字仅适用于;“本地主机”;但不在专用网络中

Java套接字仅适用于;“本地主机”;但不在专用网络中,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

我的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.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
上工作,所以它很可能不是真正的延迟问题,但除此之外,您的观点是正确的(但如上所述,与此无关)。