gpt4 book ai didi

iOS:当应用程序在后台时如何保持 TCP 套接字和 NSNetService 工作

转载 作者:行者123 更新时间:2023-11-29 12:16:46 24 4
gpt4 key购买 nike

我正在使用 GCDAsyncSocket、GCDAsyncUdpSocket 和 NSNetService 做一个 P2P VoIP 应用程序,以查找网络上具有该应用程序的其他设备。我有一个 TCP 套接字来传输用户数据和协商 UDP 连接。

我需要保持 NSNetService 服务在应用程序处于后台时发布 Bonjour,并保持打开套接字以接收来自其他设备的请求。

按iPhone的HOME键,socket不断开但不响应,只有在应用重新打开时才向应用发送数据。通过阻挡屏幕,套接字被关闭。

应用程序关闭时要发布的 NSNetService。

我激活了后台 VoIP 应用程序、音频等选项。

我用过

 [ asyncSocket performBlock : ^ {
[ asyncSocket enableBackgroundingOnSocket ];
}];

有人知道如何在 iPhone 锁定时保持 Socket 和 NSNetService 工作吗?

最佳答案

我把我认为重要的地方加粗了。

来自苹果:https://developer.apple.com/library/ios/technotes/tn2277/_index.html#//apple_ref/doc/uid/DTS40010841-CH1-SUBSECTION15

网络电话套接字VoIP(IP 语音)应用程序应持续运行,以便监控 VoIP 控制连接;但是,为了最大限度地减少对系统的内存影响,应用程序在处于非事件状态时会被挂起。 要使其正常工作,应用程序必须将其控制连接的数据套接字注册为 VoIP 套接字。以这种方式注册的套接字有两个特点:

当应用挂起时,系统会代表应用监视套接字。如果有任何数据到达套接字,系统将恢复应用程序的执行(尽管是在后台),然后它可以从套接字读取数据并采取适当的操作(例如,通知用户有来电)。永远不会回收套接字的资源。因此,可以安全地暂停该应用程序,而不必担心其套接字失聪。有关如何创建 VoIP 应用程序的更多信息,请参阅 iOS 应用程序编程指南。

你也可以引用这个:How to Maintain VOIP socket connection in background?

关于iOS:当应用程序在后台时如何保持 TCP 套接字和 NSNetService 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31815702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com