【问题标题】:What is the trick used by some iphone sip apps to communicate with UDP only sip servers?一些 iphone sip 应用程序用来与仅 UDP 的 sip 服务器通信的技巧是什么?
【发布时间】:2013-03-08 14:06:52
【问题描述】:

有些 ios sip 应用程序能够与仅 UDP 的 SIP 服务器通信。

据我所知,iOS 仅允许 TCP 连接在后台保持打开状态,但大多数 SIP 提供商仅支持 UDP。

我注意到 iOS 应用程序 3CXPhone 有一个“NAT 辅助模式”,它能够在后台保持与仅 UDP 的 3CX Phone 系统的通信。有人知道他们使用什么技巧吗?我正在开发一个 SIP 应用程序,我必须使它适用于仅 UDP 的 SIP 提供商。

我知道在 SO 的后台有多个关于 UDP 套接字的问题,但没有一个有有用的答案,或者那里提出的解决方案不再有效(从 iOS 6 开始)。

到目前为止,我知道两种可能的解决方案: 1. 使用一些 GPS 事件,并在这些事件期间保持套接字通信。之后尝试欺骗苹果并在商店中获取您的应用程序。 2.在中间使用SIP代理(B2BUA)。但是在 3CXPhone “NAT 助手模式”中,我没有看到任何 sip 代理配置。

【问题讨论】:

  • @tc。我知道这个问题以及另外 10 个可能看起来相似但他们都在处理套接字级别的问题。不幸的是,UDP 套接字的包装不再起作用了。
  • 我对结束这个问题的投票感到非常失望,我有一个问题,我正在寻找解决方案。如果问题的格式不正确,您应该帮我重新格式化问题而不是关闭它。
  • 这个问题是关于如何让应用程序穿越 NAT。
  • @FrankShearar:是和不是。问题是 iOS 只允许 TCP 套接字在后台保持打开状态并保持 NAT 处于打开状态。但是在一些 SIP 提供商中只支持 UDP,所以我正在寻找一种解决方案,在这种情况下如何保持 NAT 横向打开。

标签: iphone ios sip voip sip-server


【解决方案1】:

如果你真的需要一个 UDP 套接字,你将需要一些东西:

  • UIRequiresPersistentWiFi:确保 iOS 连接到 Wi-Fi 并且在一段时间后不会将其关闭(我假设您也想要 Wi-Fi,如果不只是忽略这个)
  • 在后台循环播放空音频以保持您的应用程序处于活动状态。
  • 有一个定时器,每十秒左右弹出一次,并向服务器发送一条小消息(例如 crlf)。

最后一步是保持 UDP 连接在网络中打开。如果你不经常发送任何东西,网络中的某个人(例如路由器)会关闭它。

空的音频文件是确保您可以在短时间内(十秒计时器)在后台执行某些操作的唯一方法。

写完之后:这会消耗大量电池。用户不会让您的应用长时间运行。

大多数现代 SIP 服务器都支持 TCP。你真的应该把时间花在 TCP 解决方案上。您的用户不会接受 UDP 协议。

【讨论】:

  • RFC 3261 需要 TCP(第 18.2.1 节),但是 (a) 代理可能是古老的并实现 RFC 2543 和 (b) 有时人们会忽略“必须” RFC...
  • 我认为它不需要 TCP。你能引用需要 TCP 的 RFC 3261 文本吗?第 18.2.1 节说,如果服务器支持 UDP,它还必须在 TCP 中列出该端口。它并没有说它只是 TCP(或者我误读了它)。
  • 确实:如果 SIP 服务器支持 UDP,它必须也支持 TCP。而且由于没有人真正使用 SCTP...
  • 对于我的问题,服务器支持 TCP,但只有提供商过滤(防火墙)了 TCP 部分。 :(
猜你喜欢
  • 1970-01-01
  • 2015-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
相关资源
最近更新 更多