我有一个在C#应用程序上运行的服务器。和Android应用程序上的客户端, 只有当这两个网络位于同一网络且仅具有私有地址192.168.1时,它们才能通信。* 如何使这项工作的公共IP地址。 如, Android App也可以从家庭网络外部进行通信
答案 0 :(得分:2)
您几乎永远无法通过互联网使用TCP直接将手机连接到计算机的原因是,您的设备中通常有一个或两个设备位于一个或多个防火墙,网关,路由器,代理服务器后面,或者{{{ 3}}泰德。
设备只能启动连接具有公共IP地址的侦听服务器。例如,虽然您的家庭计算机很可能落后于上述之一,但您可以打开NAT,因为StackOverflow Web服务器具有公共IP。
您的手机也一样。在大多数情况下,您手机的ISP(移动服务提供商)不会为您的手机分配公共IP,即使有,也可能阻止或过滤大多数数据包,这使得手机使用非常困难作为监听服务器。
您有什么选择?
端口转发。将您家的接入路由器转发到您的PC是一个很好的测试选择。 (如果您希望运行数千个客户端的某种服务,它会变得更加复杂。
通过端口转发,您首先需要确保您可以配置路由器(例如,我不能在我的建筑物中访问它)。如果您确实可以访问路由器的配置,请设置前向端口(例如,路由器上端口12345的任何内容都会转发到PC上的12345)。接下来,确定路由器的公共IP(http://www.stackoverflow.com)。最后,尝试使用路由器的IP从手机连接。请记住,您的路由器的公共IP地址很可能不是静态的,并且可能在任何特定时刻发生变化。
使用中间人。常见的选择是使用公共服务器来保持两者的联系。使用Web服务器和常规HTTP或HTTPS连接是最安全的(即沿途最不可能被阻止)。所以,例如:
请注意,每个连接都是由PC或电话启动的。中间人可以回答查询,但它不能自己启动连接(因为电话和PC都不可访问)。
虽然我说这可能是从一个到另一个传递消息的最简单方法,但是有相当多的开销和延迟不会很好。如果您不介意弄脏手,或者至少您的家用路由器是可配置的,那么当然有替代方案。查看http://www.wimi.com和port forwarding。
获取静态公共IP 。 IPv4复杂且昂贵,但它解决了您的大多数问题,特别是如果您考虑运行某种服务。