我正在向软件发送数据,用于远程控制它。 我的问题是,当我发送内容并且不关闭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];
我该如何解决这个问题?
答案 0 :(得分:0)
您完成写入后很可能只需要关闭输出流,以便另一方知道您已完成,因此它将写入您可以在输入流上读取的数据。
答案 1 :(得分:0)
如果stream:handleEvent:表示流已准备好获取要发送的数据,则只能开始发送到输出流。相反,如果您尝试从没有信号表明有新字节的流中读取,那么这也将阻止。
我为这种场景写了DTBonjour。您将获得一个简洁的API,用于通过WiFi连接或发布服务。然后,您只需将NSObject传递给连接,接收方就会收到解码后的对象。不能更容易使用:http://www.cocoanetics.com/2012/11/and-bonjour-to-you-too/