我有以下代码,我知道该代码正在运行:
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/