我用C / C ++编写了一个TCP / IP聊天服务器/客户端,它在我的本地网络中运行得很好,并且连接了多个客户端。当服务器与客户端位于不同的网络时,它不起作用。我在Python之前编写了相同的工具,同样的事情发生了。
有什么方法可以解决这个问题吗?没有端口转发,这是最常见的解决方案。
我只能找到这个:Android server concept confusion. How to connect TCP chat app on different networks但我无法理解。
注意:我刚刚找到一个示例程序(服务器),当它在不同的网络上时可以工作; http://www.codeproject.com/Articles/1891/Beginning-Winsock-Programming-Simple-TCP-server
答案 0 :(得分:2)
您有三种选择:
1)NAT渗透。两个设备同时尝试相互交换数据,诱使每个人的路由器认为它的回复。为此,每个人都需要彼此的公共IP地址,如果您需要TCP的任何功能,您需要自己实现它们。
2)公共集合服务器。两台设备都自动连接到unNATed网络上的服务器。服务器知道连接到它的每个客户端的公共IP地址,因此它可以使用正确的公共IP将数据路由到客户端。
3)1和2的某种组合。这里,公共服务器用于促进NAT渗透并消除手动协调的需要。您的朋友向公共服务器注册,公共服务器告诉他您的公共IP地址并促进NAT渗透。
答案 1 :(得分:1)
设备的本地网络地址不会有任何改变。 Yo只能通过定义本地地址到达计算机。另一方面,如果您想与不同网络中的设备通信,您应该知道其公共IP,并应定义到该端口的路由。
如果您的服务器具有静态IP或已知IP,则可以访问它。您可以在此服务器中动态存储客户端的IP地址。编写一个程序,通知服务器主机的IP。通过这种方式,您可以存储IP地址,即使它们经常更改。