2011-08-22 156 views
0

我必须让我的路由器通过某个端口xxxx将从服务器(www.server.com:1112)接收的数据转发到我的iPhone应用程序。我没有任何想法。 我的应用程序侦听端口,但服务器将数据发送到端口xxxx时,路由器拒绝该端口。iPhone中的端口转发

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

Thanx提前。

+0

你的问题是你的路由器 - 它内置的防火墙拒绝来自该端口的流量。你不能从iPhone中神奇地控制你的路由器。即使你可以,用户都有不同的路由器和防火墙! – lxt

回答

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只是'请求'一个路由器打开给定的端口。它可以拒绝,或者它可能不会首先支持它。没有办法保证它会成功,但如果没有,你可以通知用户。你的应用需要迎合这一点。
+0

感谢您指出TCMPortManager。 我之前试过TCMPortManager,但是该框架是为MAC构建的,不适用于iPhone。所以我只是抛弃了这个。现在,如果这是唯一的解决方案,我会尝试将这个框架转换为iPhone。 –

+0

是的,iOS上的框架限制有点令人失望。这纯粹是猜想,但我假设如果你检查了源代码,你可以删除所有非必需的东西,并相当容易地将TCMPortMapping类添加到你的应用程序。那里有大量的东西像路由器名称解析,你可能不需要。 –

+0

嗨,大家好,我真的需要得到这个工作。我无法让这个TCMPortMapper框架在iOS上工作。你有没有取得进展? –