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

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。该特定函数仅包含一个打印语句,以查看是否曾经被调用过。不是。

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

但是,如前所述,在开始(del)中声明的ReadDelegate对象永远不会收到stream消息,即使一次(也就是说流是打开的或任何东西)也不会收到。

为什么不呼叫该代表?

最佳答案

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

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

关于objective-c - URL的NSInputStream似乎没有任何作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25299196/

10-12 05:18