使用Stream接收数据

时间:2011-03-01 16:16:37

标签: objective-c cocoa cocoa-touch

我正在向软件发送数据,用于远程控制它。 我的问题是,当我发送内容并且不关闭inpuStream和outputStream时,应用程序正在冻结。 (也许在等待答案) 当我发送somethong并在关闭inputStream和outputStream之后,我无法回答答案,因为通信对话框已关闭。

我正在使用此方法创建一个流对。

CFReadStreamRef readStream;
    CFWriteStreamRef writeStream;
    CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)addr, port, &readStream, &writeStream);

    NSInputStream *inputStream = (NSInputStream *)readStream;
    NSOutputStream *outputStream = (NSOutputStream *)writeStream;
    [inputStream setDelegate:self];
    [outputStream setDelegate:self];
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [inputStream open];
    [outputStream open];
  

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您完成写入后很可能只需要关闭输出流,以便另一方知道您已完成,因此它将写入您可以在输入流上读取的数据。

答案 1 :(得分:0)

如果stream:handleEvent:表示流已准备好获取要发送的数据,则只能开始发送到输出流。相反,如果您尝试从没有信号表明有新字节的流中读取,那么这也将阻止。

我为这种场景写了DTBonjour。您将获得一个简洁的API,用于通过WiFi连接或发布服务。然后,您只需将NSObject传递给连接,接收方就会收到解码后的对象。不能更容易使用:http://www.cocoanetics.com/2012/11/and-bonjour-to-you-too/