1

我有两个NSInputStreamNSOutputStream之间通过网络相互连接的设备。当我在 中写入内容时output stream,数据会一直写入,直到 NSStreamEventEndEncountered事件发生。我关闭了输出流,但在另一边(input streamNSStreamEventEndEncountered事件永远不会发生,直到我退出output stream. 所以:
1. 为什么即使在相同的NSStreamEventEndEncountered事件发生在之后,事件也没有发生?(在这个事件中甚至关闭了输出流) 2. 据我了解,一旦打开,您只能写入一次数据。不可能在事件后再次打开(例如在任何事件上写一些新的东西),对吗????input streamoutput stream
NSOutputStreamoutput streamNSStreamEventEndEncountered

4

1 回答 1

3

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

1.

你没有遇到你的结束,inputstream因为你从来没有开始阅读它。outputstream写完了,因为它可能遇到了一个结局,就像你说的那样。

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

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

2.

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

于 2013-10-11T14:20:35.427 回答