2012-03-04 96 views
2

我目前正在iPad上开发一个应用程序,该应用程序连接到本地网络上的客户端PC并传递消息。 在阅读以下教程后,我在客户端安装了python应用程序: http://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server如何在没有服务器或端口转发的情况下远程访问网络

它适用于本地连接。 应用程序打开一个连接端口,我的iPad应用程序使用客户端和端口的本地IP连接。

如果我想连接到公共IP会发生什么? 我试过了,它不起作用。我从以下站点获得了客户端的公共IP: http://www.whatismyip.com/

和我用同一个python应用程序打开一个端口。 我想,我必须在我的路由器上打开一个端口并将其转发给客户端。但有没有办法做到这一点,而无需访问我的路由器的设置。我想实现即时访问,以便用户不必担心设置。

就像Skype一样,或多人游戏或其他在线服务。我的问题有点泛泛,不具体。非常遗憾。我希望它也可以帮助其他人。

+1

如果你听一个端口,你就会成为一个服务器。你也可以给服务器一个静态ip或者用dyndns.com设置一个动态的dns – 2012-03-07 13:56:26

回答

3

可以推测,您尝试访问的机器位于路由器/ NAT设备后面。换句话说,它不直接连接到互联网。

路由器负责决定哪些数据报可以在私有网络和公共网络之间移动,以及他们应该去哪里。

Skype,游戏和在线服务都从私有网络向外发起连接到公共网络上的服务器。传出网络流量触发临时NAT(网络地址转换)规则,该规则允许从目的地返回的数据报被路由回专用主机。

但是其他传入流量将被阻止,除非您在路由器/ NAT中专门设置了一条规则,告诉它在哪里发送数据。它还会如何知道将数据转发到哪个地址?

所以只有三种方法可以用一台机器的NAT路由器后面通信:

  • 它必须首先联系。
  • 有人必须配置NAT /路由器以将公共端口转发到私有机器。
  • 你们都必须联系第三台充当中间人的机器。

为主机建立完整连接的唯一方法是拥有自己正确路由的公共IP地址。否则,NAT的全部重点就是限制连接。

相关问题