2011-08-22 168 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上工作。你有沒有取得進展? –