标题:Qt iOS 后台如何保持socket长连接???
作者:codebear
日期:2015-03-31 11:35
内容:
Objective-C 通过设置流属性kCFStreamNetworkServiceTypeVoIP保持长连接,Qt后台如何实现长连接?
#1 [toby520 03-31 11:44]
使用Qt的sockets想保持长连接是不可能的,移动端手机的机制是不会允许的,只要你app后台后 过段时间会被阻塞,这样你的长连接会被中断,只有服务才可以使用
#2 [toby520 03-31 12:56]
办法解决分为两步:
1.修改plist的一个属性Voice over IP" in xxx .plist file.
2.集成native code 类似以下
driver = ProxyDriver::getInstance(5150);
NSLog(@"Socket descriptor %i" , driver->socketDescriptor());
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocket (kCFAllocatorDefault, driver->socketDescriptor(),&readStream, &writeStream);
CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
#3 回 toby520 的帖子 [codebear 03-31 15:56]
toby520:
办法解决分为两步:
1.修改plist的一个属性Voice over IP" in xxx .plist file.
2.集成native code 类似以下
driver = ProxyDriver::getInstance(5150);
NSLog(@"Socket descriptor %i" , driver->socketDescriptor());
.......
按你说的做了,但在后台时socket仍然接收不到数据,函数在.mm文件里,代码是这样的:
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocket (kCFAllocatorDefault, (CFSocketNativeHandle)socketDescriptor,&readStream, &writeStream);
CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
socketDescriptor是QTcpSocket连接服务器成功后的socket,而且CFReadStreamSetProperty和CFWriteStreamSetProperty调用成功了,想不明白?