我的java套接字程序出现问题。 我在主机A上打开一个ServerSocket。 在主机B上,我在同一个私人网络中 尝试绑定到服务器,但我总是会超时。
主持人A |服务器| IP:192.168.56.1
主持人B |客户| 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上启动服务器时,套接字运行良好
并输入“localhost”。
这有什么不对?谢谢你的帮助。
答案 0 :(得分:0)
这通常意味着传入端口2323未在主机A上打开。
因此主机B无法连接到主机A上的端口2323。
在局域网中并非所有端口都是打开的。你无法连接
在您想要的任何端口上的任何机器(从您的LAN)。
从主持人B尝试:
telnet 92.168.56.1 2323
如果你不能用这种方式连接,那么你的客户端java程序
不会连接,这是正常的。
然后,您应该与您的网络管理员联系。
如果你能用这种方式连接,那么你应该看看 以某种方式修复你的java程序。
答案 1 :(得分:0)
setSoTimeout(int)的Javadoc说:
使用指定的超时启用/禁用SO_TIMEOUT,以毫秒为单位。 将此选项设置为非零超时,调用accept() 此ServerSocket将仅阻止这段时间。如果 超时到期,但引发了java.net.SocketTimeoutException ServerSocket仍然有效。必须在之前启用该选项 进入阻止操作才能生效。超时必须> 0.超时为零被解释为无限超时。
试试这个:
welcomeSocket.setSoTimeout(0);
在阻止服务器接受来自客户端的请求之前添加此语句。
注意:确保两台机器彼此均可访问,以确保正确连接。
答案 2 :(得分:0)
如果你的子网掩码是255.255.255.0(这是C类私有子网的标准),那么你的两台机器在不同的子网上:
Host A | Server | IP: 192.168.56.1
Host B | Client | IP: 192.168.47.1
.56。和.47。作为操作元素。尝试将IP更改为192.168.56.0/24
或192.168.47.0/24
,您就可以了。
或者,您需要在两个子网之间设置静态路由。
干杯,
答案 3 :(得分:0)
感谢您帮助我!
我的程序现在正常运行。 感谢Anders对不同子网掩码的暗示,我认识到了这一点 知识产权是错误的。在Windows控制面板中查看我发现了一个不同的IP地址 对于主机A.实际上它们位于相同的子网掩码中。
我宁愿期待
给出的地址InetAddress.getLocalHost().getHostAddress()
作为我的地址。
那么如何在java程序中显示我的“真实”IP地址?
答案 4 :(得分:-1)
如果IP可以访问,则在HOST文件中添加条目