当多台计算机具有相同的IP地址时,如何通过编程连接其中一台计算机?

3
这个问题有点难以表述,我不确定是否理解了潜在的问题,但是让我来试试: 我有一个Java聊天程序。我使用两个JAR文件运行它 - 服务器和客户端。您在计算机上后台运行服务器,然后当您运行客户端时,只需输入运行服务器的计算机的IP地址并点击连接即可。我以前用过几次,而且一直都可以正常工作。我的问题现在是,虽然我仍然可以在我们家庭网络内使用本地IP地址(以192开头的那个)使其工作,但我无法使用公共/全局IP地址使其工作。我注意到我们所有连接到同一个调制解调器(路由器?)的家用计算机都具有相同的全局IP地址(我检查了whatismyipaddress.com)。这可能是问题吗?如果我们所有计算机都具有相同的IP地址,程序如何知道要去哪一个服务器程序呢?有没有办法让它工作?

谢谢!

3个回答

4

这个问题应该放在serverfault上讨论。简单来说,你需要在路由器上设置端口转发。这会告诉路由器,对于特定端口的请求,应该将它们转发到哪台机器的内部IP地址。详细的操作指南可以参考http://www.portforward.com


端口转发在路由器网络内部不应该是必要的。 - matt b
他可以从内部网络很好地连接到它。只有从外部连接它才会出现问题。因此,需要进行端口转发。 - Anon.

2
你的网络正在进行的是网络地址转换或NAT。当本地网络上的一台机器(客户端)想要联系网络外的一台机器(服务器,例如具有公共IP地址的互联网主机)时,路由器会跟踪数据包应该发送到哪里,并将它们送回给适当的客户端,即使针对本地网络上不同客户端的数据包都将发往相同的IP地址。
如果客户端与服务器建立连接,则这种方法可以正常工作。服务器无法回传连接到客户端,也不能任意发送UDP数据包,除非像danben提到的那样设置了静态端口转发。
还有UPnP,它允许客户端基本上设置自己的临时端口转发规则,但我不太了解具体情况。
您应该能够做到的是,让客户端与服务器建立TCP/IP连接,然后该连接上的所有流量(上行和下行)都应该由路由器处理得很好。如果您的服务器没有公共IP,则需要在路由器上设置静态端口转发,以便所有进入特定端口的流量都被路由到网络内部的私有IP。这可能意味着您还需要为服务器分配一个静态私有IP。

0

仅因为网络上所有计算机在外部看起来具有相同的外部IP地址,并不意味着它们在您的网络内部都具有相同的IP地址。

很可能,您的路由器正在为网络上的每台计算机分配内部/私有IP地址,通常以192.168或10.something开头。这是在您的网络内部用于计算机之间通信的IP地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接