2013-03-08 47 views
4

有一些ios sip應用程序能夠與僅UDP的SIP服務器進行通信。某些iphone sip應用程序用於與僅UDP SIP服務器通信的技巧是什麼?

據我所知,iOS只允許TCP連接在後臺保持打開狀態,但大多數SIP提供者僅支持UDP。

我注意到iOS應用程序3CXPhone有一個「NAT輔助模式」,它能夠保持與僅爲UDP的3CX電話系統的後臺通信。劑量誰知道他們使用什麼技巧?我正在開發一個SIP應用程序,並且必須使它適用於僅UDP的SIP提供程序。

我知道有關於UDP背景上的UDP套接字有多個問題,但他們都沒有一個有用的答案或提出的解決方案不再有效(從iOS 6開始)。

到目前爲止,我知道兩種可能的解決方案: 1.使用一些GPS事件,並在此期間保持套接字通信。之後,試圖欺騙蘋果,並在商店中獲得你的應用程序。 2.在中間使用SIP代理(B2BUA)。但在3CXPhone「NAT幫助模式」中,我沒有看到任何sip代理配置。

+0

[iOS 4 VOIP應用程序在後臺響應]的可能重複(http://stackoverflow.com/questions/3478344/ios-4-voip-app-responding-in-the-background) – 2013-03-09 00:13:23

+0

@tc。我意識到這個問題,還有另外10個人可能看起來很相似,但他們都是在套接字級別處理這個問題。不幸的是,UDP套接字的包裝不再工作了。 – alinoz 2013-03-09 08:14:26

+0

我非常失望的投票結束這個問題,我有一個問題,我正在尋找一個解決方案。如果問題的格式不正確,您應該幫助我重新格式化問題,而不是關閉它。 – alinoz 2013-03-09 08:21:24

回答

0

如果你真的需要一個UDP套接字,您將需要幾件事情:

  • UIRequiresPersistentWiFi:確保連接的iOS到Wi-Fi和一段時間後沒有關閉它(我假設你也想要Wi-​​Fi,如果不是隻是忽略這個)
  • 在循環背景中播放一個空的音頻,以保持你的應用程序活動。
  • 有一個計時器每10秒鐘左右彈出一次,並向服務器發送一個小的(例如crlf)消息。

需要最後一步使UDP連接在網絡中保持打開狀態。如果您不經常發送任何東西,網絡中的某個人(例如路由器)會關閉它。

空的音頻文件是確保您可以在短時間間隔(十秒計時器)後臺執行某些操作的唯一方法。

寫完所有內容後:這會消耗大量電量。用戶不會讓你的應用程序運行很久。

大多數現代SIP服務器都支持TCP。你應該花時間在TCP解決方案上。 UDP用戶不會被用戶接受。

+0

RFC 3261 _requires_ TCP(18.2.1節),但(a)代理可能很古老,實現RFC 2543,(b)有時候人們忽略RFC中的「必須」...... – 2013-03-09 20:12:11

+0

我不認爲它需要TCP 。你能引用需要TCP的RFC 3261文本嗎?第18.2.1節說,如果一個服務器支持UDP,它也必須在TCP中列出該端口。它沒有說它只是TCP(或者我誤解了它)。 – chr 2013-03-09 20:30:06

+0

事實上:如果SIP服務器支持UDP,它必須支持TCP。由於沒有人實際使用SCTP ... – 2013-03-09 20:52:43