Reputation: 123
I have two NSInputStream
and NSOutputStream
between devices that are connected to each other via network. When I write something in output stream
, the data is written until the NSStreamEventEndEncountered
event occurs. I close the output stream but on the other side (input stream
) the NSStreamEventEndEncountered
event never occurs, until I exit the view controller of the output stream
. So:
1. Why does not the NSStreamEventEndEncountered
event occurs at input stream
even after the the same occurred at the output stream
? (the output stream is even closed in this event)
2. It is my understanding that, once you open the NSOutputStream
, you can only write data once. Opening the output stream
again after NSStreamEventEndEncountered
event (for example to write something new on any event) is not possible, right ????
Upvotes: 1
Views: 1138
Reputation: 1284
I probably need more info about your connection and how you're sending your data but let me try and answer your questions:
1.
You're not encountering an end of your inputstream
because you never started reading from it. The outputstream
finished writing because it probably encountered an end, just like you said.
Imagine Jacob (your outputstream
) delivering a envelope (your data) to his friend's house. Jacob puts the envelope on his friend's doormat and walks back to his own house. At this point Jacob's work is done so he tells himself that he's done (in your case the outputstream
signals an NSStreamEventEndEncountered
).
Jacob's friend George (your inputstream
) could see the envelope or not, but nevertheless never looks what is in it. So unless George takes the envelope and looks what is inside it, he could never tell himself that he finished looking at it (in your case the inputstream
never signals an NSStreamEventEndEncountered
).
2.
This actually depends on how you plan to use your outputstream
. If you plan to send data multiple times to the same device, why not leave the outputstream
open? You can write data as long as the socket is open and there is space available. When you close the outputstream
you need to reopen it however.
Upvotes: 3