iPhone中的端口转发

时间:2011-08-22 13:07:49

标签: iphone networking port bonjour

我必须让我的路由器将从服务器(www.server.com:1112)收到的数据通过某个端口xxxx转发到我的iPhone应用程序。我什么都不知道。 我的应用程序侦听端口,但是当服务器将数据发送到端口xxxx时,路由器拒绝该端口。

我在路由器中进行了手动配置,效果很好。但我不能指望所有用户都这样做,我也不能强迫他们做这样的手动配置。任何人都可以通过提供iPhone的示例代码来帮助我。

提前完成。

1 个答案:

答案 0 :(得分:1)

正如您所说,您不能指望用户手动打开防火墙上的端口,但您不能指望他们的防火墙首先允许这样做。

我建议你最好的办法就是使用uPNP并让兼容的路由器为你设置端口转发,类似于BitTorrent。我对TCMPortMapper框架感到满意,并且在subethaedit等应用中用于制作。为了无耻地从文档中删除,打开端口就像这样简单:

TCMPortMapper *pm = [TCMPortMapper sharedInstance];
[pm addPortMapping:
[TCMPortMapping portMappingWithLocalPort:1337 # local port iPhone listens on 
                    desiredExternalPort:13337 # remote port you want router to listen on
                      transportProtocol:TCMPortMappingTransportProtocolTCP
                               userInfo:nil]];
[pm start];

请记住:

  1. 以上需要连续运行(阻止主线程)才能使端口保持打开状态。您需要在后台运行它并注册通知。有关详细示例,请阅读documentation
  2. uPNP只是'请求'路由器打开给定端口。它可以拒绝,或者它可能首先不支持它。虽然如果没有,您可以通知用户,但无法保证它会成功。您的应用需要满足此需求。