NSInputStream和NSOutputStream问题

时间:2013-02-06 11:22:34

标签: ios nsstream nsinputstream nsoutputstream

我之间有两个NSInputStreamNSOutputStream设备之间通过网络相互连接。当我在output stream中写入内容时,数据将被写入,直到NSStreamEventEndEncountered事件发生。我关闭输出流,但在另一端(input stream),NSStreamEventEndEncountered事件永远不会发生,直到我退出output stream的视图控制器。所以:
 1.为什么NSStreamEventEndEncountered事件发生在input stream,即使在output stream发生同样事件后也是如此? (在这种情况下输出流甚至关闭)
 2.据我了解,一旦打开NSOutputStream,您只能写一次数据。在output stream事件之后再次打开NSStreamEventEndEncountered(例如在任何事件上写新内容)是不可能的,对吧????

1 个答案:

答案 0 :(得分:3)

我可能需要有关您的连接以及您如何发送数据的更多信息,但让我尝试回答您的问题:

1

你没有遇到inputstream的结尾,因为你从未开始阅读它。 outputstream完成了写作,因为它可能遇到了结束,就像你说的那样。

想象一下雅各布(你的outputstream)将一个信封(你的数据)发送给他朋友的家。雅各把信封放在他朋友的门垫上,然后走回自己的房子。 此时雅各布的工作已经完成,所以他告诉自己他已经完成了(在你的情况下,outputstream发出信号NSStreamEventEndEncountered)。

雅各布的朋友乔治(你的inputstream)可以看到信封,但不会看到它的内容。 因此,除非George拿出信封并查看其中的内容,否则他永远无法告诉自己他已经完成了查看(在您的情况下,inputstream从未发出信号NSStreamEventEndEncountered

2

这实际上取决于您打算如何使用outputstream。如果您计划多次向同一设备发送数据,为什么不让outputstream保持打开状态?只要套接字打开并且有可用空间,您就可以写入数据。当你关闭outputstream时,你需要重新打开它。