CFStream Socket 发送数据包在 IOS 7.0 中未完成
Posted
技术标签:
【中文标题】CFStream Socket 发送数据包在 IOS 7.0 中未完成【英文标题】:CFStream Socket send packet not complete in IOS 7.0 【发布时间】:2013-09-25 10:15:43 【问题描述】:我使用 CFStream Socket 向主机发送数据。 第一次发送是工作。 但首先,主机接收的数据总是被分散的。 例如:
第一次发送:
Sender: <11223344 55667788>
Recver: <11223344 55667788>
没关系
第二次,第三次……
Sender: <11223344 55667788>
Recver: <11>
Recver: <223344 55667788>
此症状仅在 ios 7.0 中出现。 6.0、5.0没有这个症状...
enter code here
CFReadStreamRef inputStream;
CFWriteStreamRef outputStream;
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)_owner.ip, _owner.port, &inputStream, &outputStream);
NSDictionary *sslSettings = @(id)kCFStreamSSLValidatesCertificateChain: (id)kCFBooleanFalse;
CFReadStreamSetProperty(inputStream, kCFStreamPropertySocketSecurityLevel, kCFStreamSocketSecurityLevelTLSv1);
CFReadStreamSetProperty(inputStream, kCFStreamPropertySSLSettings, (__bridge CFTypeRef)(sslSettings));
CFWriteStreamSetProperty(outputStream, kCFStreamPropertySocketSecurityLevel, kCFStreamSocketSecurityLevelTLSv1);
CFWriteStreamSetProperty(outputStream, kCFStreamPropertySSLSettings, (__bridge CFTypeRef)(sslSettings));
_inputStream = (__bridge_transfer NSInputStream *)inputStream;
[_inputStream setDelegate:self];
[_inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
_outputStream = (__bridge_transfer NSOutputStream *)outputStream;
[_outputStream setDelegate:self];
[_outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[_inputStream open];
[_outputStream open];
谢谢
【问题讨论】:
【参考方案1】:这似乎是缓解 BEAST 攻击的 1/n-1 拆分技术。 http://threatpost.com/apple-turns-on-safari-beast-attack-mitigation-by-default-in-os-x-mavericks/102804
您的服务器可能只支持 TLS 1.0。如果你升级你的服务器以支持 TLS 1.2,我相信 iOS 会停止这样做。
【讨论】:
以上是关于CFStream Socket 发送数据包在 IOS 7.0 中未完成的主要内容,如果未能解决你的问题,请参考以下文章