0

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

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”消息并且服务器正在发送文件(我在其他环境中进行了测试,可以很好地接收文件)。

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

为什么没有调用代表?

4

1 回答 1

1

由于您的 while 循环,您的流似乎没有收到事件。

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

于 2014-08-15T12:45:44.287 回答