iPhone OS 4.x - 后台 TCP 套接字没有响应

标签 iphone objective-c multitasking

我正在尝试使用 iPhone OS 4.x 提供的新机制来实现 VoIP 应用程序的后台模式

仍然没有成功...当一些数据通过 TCP 套接字从服务器到达时,应用程序在后台模式下保持静默。

根据文档,必须完成以下两件事:

  1. Info.plst 文件中为所需后台模式添加 voip
  2. CFReadStreamRef 对象的属性 kCFStreamNetworkServiceType 设置为 kCFStreamNetworkServiceTypeVoIP

我正在使用外部创建的 BSD 套接字通过 CFStreamCreatePairWithSocket 函数实例化 CFReadStreamRef 。套接字句柄是正确的 - 通过一些测试进行检查。因此,我获得了一个正确的 CFReadStreamRef 对象,稍后我将配置并打开该对象。

这是代码块:

CFSocketNativeHandle socket = (CFSocketNativeHandle)socketHandle; 
CFStreamCreatePairWithSocket(kCFAllocatorDefault, socket, &sipSocketReadStream, nil);
CFReadStreamSetProperty(sipSocketReadStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
NSInputStream *inputStream = (NSInputStream*)sipSocketReadStream;   
[inputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
CFReadStreamOpen(sipSocketReadStream);

请注意 - 我的 NSInputStream 委托(delegate)成功接收到 Stream Opened 事件。但任何其他事件根本没有出现 - 我希望在一些 TCP 流量开始到达时收到一个事件。

最佳答案

我必须重申吉拉德提到的明智建议。后台 TCP 套接字不能在模拟器上工作。我花了相当长的时间试图弄清这个问题的根源,并被模拟器的便利所吸引。

此外,也许只有我一个人,我没有从文档中清楚地发现哪个值是键,哪个值是属性。作为记录,这就是我的设置方式和工作原理:

res = [oStream setProperty:NSStreamNetworkServiceTypeVoIP 
                    forKey:NSStreamNetworkServiceType];

if(!res){
   // Error handling here
}

关于iPhone OS 4.x - 后台 TCP 套接字没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444639/

相关文章:

c - FreeRTOS 锁和任务

iphone - 项目使用QuartzCore时,Xcode怎么没有自动链接?

iphone - Objective-C 类实例在分配时归零?

iphone - TabBar应用、CoreData相关应用崩溃

iphone - 从 iPhone 麦克风检测节拍

ios - 如何在搜索操作后更新过滤后的 tableView 中的 tableViewCell 数据?

iphone - 为 UILabel 赋值时模拟器崩溃

ios - 除了模态视图 Controller 之外的所有 View Controller 中的纵向方向

iPhone - 应用程序在后台运行时更改应用程序设置

iPhone应用程序后台网络通信