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