我有以下代码,我知道它正在运行:
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
消息,即使一次(也就是说流是打开的或其他)。
为什么代表没有被调用?
答案 0 :(得分:1)
看起来你的流因为你的while循环而没有收到事件。
流中的每个新事件都可以在运行循环的新迭代中处理。但是新的迭代无法启动,因为当前的迭代永远不会完成。