我正在尝试编写OS X应用程序,使用NSStreams发送推送通知。一切似乎都没问题但我在向gateway.sandbox.push.apple.com发送数据时收到错误-9844。来自SecureTransport.h
errSSLConnectionRefused = -9844, /* peer dropped connection before responding */
这是我创建和打开输出流的方式:
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)@"gateway.sandbox.push.apple.com", 2195, &readStream, &writeStream);
self.outputPushStream = (__bridge_transfer NSOutputStream *)writeStream;
[self.outputPushStream setProperty:NSStreamSocketSecurityLevelNegotiatedSSL forKey:NSStreamSocketSecurityLevelKey];
self.outputPushStream.delegate = self;
[self.outputPushStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
[self.outputPushStream open];
在NSStream委托中收到NSStreamEventOpenCompleted事件后,我发送数据:
const uint8_t *data = pushData.bytes;
[self.outputPushStream write:data maxLength:pushData.length];
我猜这可能是证书的一些问题。我有钥匙链推送通知的开发证书和密钥。我没有任何SSL或NSStream的经验,所以我真的不知道接下来要去哪里看。
答案 0 :(得分:0)
我不确定钥匙串中的证书是否足以让CFStreamCreatePairWithSocketToHost
设置ssl连接。我发现this代码与您想要的代码完全相同,但它会通过代码传递证书(请参阅configureStreams
和certificateArray
方法)。