来自URL的NSInputStream似乎没有得到任何东西

时间:2014-08-14 02:38:55

标签: objective-c cocoa nsinputstream

我有以下代码,我知道它正在运行:

ReadDelegate * del = [[ReadDelegate alloc] init];
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;

CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)(@"server.com"), port, &readStream, &writeStream);

NSInputStream * readSock = (__bridge_transfer NSInputStream*)readStream;

[readSock setDelegate:del];
[readSock scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

NSOutputStream * writeSock = (__bridge_transfer NSOutputStream*)writeStream;
[writeSock scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
NSLog(@"Open socket");
[readSock open];
[writeSock open];

[writeSock write:(uint8_t*)("request\0\0\0") maxLength:10];


while (YES) {
     //I'm skipping over inconsequential stuff
}
NSLog(@"finished reading");
[readSock close];
[writeSock close];

return [del getMessage];

我的ReadDelegate类声明为@interface ReadDelegate : NSObject <NSStreamDelegate>并包含- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode。该特定函数只有一个print语句,以查看它是否被调用。不是。

我知道连接正在打开,因为我的服务器正在接收“request \ 0 \ 0 \ 0”消息并且服务器正在发送文件(我在其他可以接收文件的环境中进行测试细)。

但是,如上所述,在开头(del)中声明的ReadDelegate对象永远不会收到stream消息,即使一次(也就是说流是打开的或其他)。

为什么代表没有被调用?

1 个答案:

答案 0 :(得分:1)

看起来你的流因为你的while循环而没有收到事件。

流中的每个新事件都可以在运行循环的新迭代中处理。但是新的迭代无法启动,因为当前的迭代永远不会完成。