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