我之间有两个NSInputStream
和NSOutputStream
设备之间通过网络相互连接。当我在output stream
中写入内容时,数据将被写入,直到NSStreamEventEndEncountered
事件发生。我关闭输出流,但在另一端(input stream
),NSStreamEventEndEncountered
事件永远不会发生,直到我退出output stream
的视图控制器。所以:
1.为什么NSStreamEventEndEncountered
事件发生在input stream
,即使在output stream
发生同样事件后也是如此? (在这种情况下输出流甚至关闭)
2.据我了解,一旦打开NSOutputStream
,您只能写一次数据。在output stream
事件之后再次打开NSStreamEventEndEncountered
(例如在任何事件上写新内容)是不可能的,对吧????
答案 0 :(得分:3)
我可能需要有关您的连接以及您如何发送数据的更多信息,但让我尝试回答您的问题:
1
你没有遇到inputstream
的结尾,因为你从未开始阅读它。 outputstream
完成了写作,因为它可能遇到了结束,就像你说的那样。
想象一下雅各布(你的outputstream
)将一个信封(你的数据)发送给他朋友的家。雅各把信封放在他朋友的门垫上,然后走回自己的房子。 此时雅各布的工作已经完成,所以他告诉自己他已经完成了(在你的情况下,outputstream
发出信号NSStreamEventEndEncountered
)。
雅各布的朋友乔治(你的inputstream
)可以看到信封,但不会看到它的内容。 因此,除非George拿出信封并查看其中的内容,否则他永远无法告诉自己他已经完成了查看(在您的情况下,inputstream
从未发出信号NSStreamEventEndEncountered
)
2
这实际上取决于您打算如何使用outputstream
。如果您计划多次向同一设备发送数据,为什么不让outputstream
保持打开状态?只要套接字打开并且有可用空间,您就可以写入数据。当你关闭outputstream
时,你需要重新打开它。