【问题标题】:NSInputStream and NSOutputStream problemsNSInputStream 和 NSOutputStream 问题
【发布时间】:2013-02-06 11:22:33
【问题描述】:

我在通过网络相互连接的设备之间有两个NSInputStreamNSOutputStream。当我在output stream 中写入内容时,数据会一直写入到NSStreamEventEndEncountered 事件发生。我关闭了输出流,但在另一边(input streamNSStreamEventEndEncountered 事件永远不会发生,直到我退出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 时,您需要重新打开它。

    【讨论】:

      猜你喜欢
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多