这个问题有点难以表达,我不确定我是否理解了潜在的问题,但这里有: 我有一个java聊天程序。我使用2个jar文件运行它 - 服务器和客户端。您在计算机的后台运行服务器,然后当您运行客户端时,您只需输入运行服务器的计算机的IP地址并点击连接。我以前用了好几次,而且一直都有用。我现在的问题是,虽然我仍然可以通过使用本地IP地址(以192开头的那个)在我们的家庭网络中工作,但我无法使用公共/全局IP地址使其工作。我注意到我们所有连接到相同调制解调器(路由器?)的家用计算机都具有相同的全局IP地址(我查看了whatismyipaddress.com)。这可能是问题吗?如果我们所有的计算机都具有相同的IP地址,程序如何知道服务器程序要去哪一台?关于如何让它发挥作用的任何想法?
谢谢!
答案 0 :(得分:2)
这真的属于serverfault。但简短的回答是您需要在路由器上设置端口转发。这告诉路由器,对于给定端口上的传入请求,应该将这些请求定向到的机器的内部IP地址。查看http://www.portforward.com了解详细说明。
答案 1 :(得分:2)
您的网络正在做什么称为“network address translation”或NAT。当本地网络(客户端)上的计算机想要联系网络外部的计算机(服务器,例如具有公共IP地址的Internet主机)时,路由器会跟踪数据包的发送位置并将其发送回适当的客户端,即使发往本地网络上不同客户端的数据包都将使用相同的IP。
如果客户端建立与服务器的连接,则此工作正常。服务器无法启动连接回客户端,也不能随意发送UDP数据包,除非像danben所说的那样设置静态端口转发。
有UPnP允许客户基本上设置自己的临时端口转发规则,但我对具体细节知之甚少。
您应该能够做的是让客户端与服务器建立TCP / IP连接,然后路由器应该正确处理该连接上下游的所有流量。如果您的服务器没有公共IP,则需要在路由器上设置静态端口转发,以便将某个端口上的所有流量路由到网络内的专用IP。这可能意味着您还需要为服务器分配静态专用IP。
答案 2 :(得分:0)
仅仅因为网络上的所有计算机都具有相同的外部IP地址(从网络外部看到)并不意味着它们在网络中具有相同的IP地址。
更有可能的是,您的路由器正在为网络中的每台计算机分配内部/私有IP地址,可能从192.168或10.something开始。这是网络中的计算机用于相互通信的IP地址。