Java Socket 仅适用于"localhost",不适用于专用网络



我的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/24192.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访问

,请在主机文件中添加一个条目

相关内容

  • 没有找到相关文章

最新更新