我的java套接字程序遇到了麻烦。我正在主机A上打开一个求助。在同一专用网络中的主机B上,我尝试绑定到服务器,但我总是暂停。
主持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"。
这里怎么了?感谢您的帮助。
如果您的子网掩码为255.255.255.0(这是C类私人子网的规范),则您的两台机器在不同的子网上:
Host A | Server | IP: 192.168.56.1
Host B | Client | IP: 192.168.47.1
.56。和.47。作为手术要素。尝试更改为192.168.56.0/24
或192.168.47.0/24
中的IP,您会没事的。
另外,您需要在两个子网之间设置静态路线。
欢呼,
setsotimeout(int)的javadoc说:
以毫秒为单位启用/禁用SO_TIMEOUT。 将此选项设置为非零超时,请呼叫接受() 此求助功能只能阻止此时间。如果是 超时到期,java.net.sockettimeoutexception已提高 serversocket仍然有效。该选项必须在 输入阻止操作以产生效果。超时必须是> 0.零超时被解释为无限超时。
尝试以下操作:
welecomesocket.setsotimeout(0);
在阻止服务器以接受客户端请求之前添加此语句。
注意:确保两台机器都可以互相访问以确保正确的连接。
这通常意味着传入端口2323在主机A上不打开。
因此,主机B无法连接到主机上的端口2323。
在LAN中,并非所有端口都打开。你不能连接
到您想要的任何端口上的任何机器(来自LAN)。
尝试从主机B:
telnet 92.168.56.1 2323
如果您不能以这种方式连接,则客户端Java程序
也不会连接,这是正常的。
您应该联系您的网络管理员。
如果您可以这样连接,则只有然后才能查看
以某种方式修复Java程序。
谢谢您的帮助!
我的程序现在正常工作。多亏了安德斯(Anders)对不同子网面具的提示,我认识到IP是错误的。在Windows Control面板中查看我的IP Adress揭示了我不同的IP地址对于主机A。实际上它们在同一子网掩码中。
我宁愿期待
给予的地址InetAddress.getLocalHost().getHostAddress()
作为我的地址。
那么如何在Java程序中显示我的"真实" IP Adress?
如果IP访问