gpt4 book ai didi

ios - iphoneOS 后台套接字

转载 作者:行者123 更新时间:2023-11-29 13:42:48 25 4
gpt4 key购买 nike

我有一个简单的 TCP 客户端,它连接到一个简单的 TCP 服务器,每 5 秒发送一次“ping”。我使用从标准 C 套接字库读取的命令读取这些“ping”。

int numberOfBytes = read(m_clientSocketFileDescriptor,buffer,255);
if (numberOfBytes < 0) {
error("reading from socket");
}

我已经在我的应用程序 plist 文件中设置了 WIFI 使用、背景声音和背景 voip 值。我将我的套接字声明为后台,如下所示:

 - (void)applicationWillEnterForeground:(UIApplication *)application
{
if (m_clientSocketFileDescriptor) {
CFStreamCreatePairWithSocket(kCFAllocatorDefault, m_clientSocketFileDescriptor, &m_tcpReadStream, nil);
if (m_tcpReadStream != NULL) {
CFReadStreamSetProperty(m_tcpReadStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
}
}
}

当我按下主页按钮时,这非常有效。我的 ping 是从服务器收到的,当我唤醒我的应用程序时,所有消息都已收到。我的问题是当我使用电源按钮锁定 iPhone 屏幕时。套接字实际上是关闭的。我的服务器收到 SIGPIPE 错误,当我唤醒手机时,read() 函数显示:“套接字未连接”。

我认为如果在用户锁定屏幕时出现故障(默认情况下,这会在 1 或 5 分钟后发生),那么使用后台套接字是非常愚蠢的,所以也许我做事的方式不对。

有没有人设法克服这个问题?使用 iphone 3GS 和 iphone 4 在 iOS 5.0 上测试。

最佳答案

您可能需要使用 -[UIApplication setKeepAliveTimeout:handler:] .我想如果你没有这个处理程序,操作系统会假设你的应用程序无论如何都无法处理对套接字的任何响应并关闭它。另见 Apple's Tips for Developing a VoIP app .

关于ios - iphoneOS 后台套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8619343/

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