• 5832阅读
  • 3回复

[讨论]Qt iOS 后台如何保持socket长连接??? [复制链接]

上一主题 下一主题
离线codebear
 

只看楼主 倒序阅读 楼主  发表于: 2015-03-31
Objective-C 通过设置流属性kCFStreamNetworkServiceTypeVoIP保持长连接,Qt后台如何实现长连接?
在线toby520

只看该作者 1楼 发表于: 2015-03-31
使用Qt的sockets想保持长连接是不可能的,移动端手机的机制是不会允许的,只要你app后台后 过段时间会被阻塞,这样你的长连接会被中断,只有服务才可以使用
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
在线toby520

只看该作者 2楼 发表于: 2015-03-31
办法解决分为两步:
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);
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线codebear

只看该作者 3楼 发表于: 2015-03-31
回 toby520 的帖子
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调用成功了,想不明白?
快速回复
限100 字节
 
上一个 下一个