1

我正在尝试将我的应用程序设置为即使在应用程序被挂起时也能监听 tcp-socket。如苹果文档中所述,我在 Info.plist 中设置了 voip-background 模式。现在我被困在哪里说:“配置应用程序的一个套接字以供 VoIP 使用。”。我正在尝试使用 CFReadStreamSetProperty() 方法来做到这一点,但关键是我如何创建套接字。套接字的创建是通过标准 C 库完成的,如下所示:

int mySock = socket(AF_INET, SOCK_STREAM, 0);

这是在现有库中的 .cpp 文件中完成的。这是我尝试为 VoIP 使用配置套接字的内容:

CFStreamCreatePairWithSocket(kCFAllocatorDefault, sock, &readStream, &writeStream);
if(readStream && writeStream)
{
   CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
   CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
}

当我逐步完成它时,它看起来不错,但不幸的是它不起作用。每当应用程序从前台转到后台/挂起时,连接就会丢失,并且来自服务器的任何输入都会被忽略。我不知道套接字的配置是否可以这样完成并且找不到答案。

4

2 回答 2

1

这是我在这个论坛的第一篇文章。但我发现这是有效的。

  1. 在 info.plist 文件中设置 VOIP
  2. CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);

    CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);

  3. 使用 TCP 套接字

它不适用于 UDP 套接字。如果我错了,请编辑这篇文章。

于 2013-03-21T06:01:39.433 回答
0

你用的是 iPhone 5S 还是 5C?

尝试使用 iPhone 5 或 iPad 2 等设备

这些设备(可能是 iPad Air,无法确认...)存在一个与 VOIP 套接字有关的已知问题,已报告错误报告,我们仍在等待 Apple 修复它...

于 2014-04-03T14:09:51.603 回答