流式获取数据 - NSInputStream
所有,
我有一个服务器,它有一个用于通信的 TCP 套接字流。我需要访问该流并读取它需要发送给我的初始数据。
我当前的代码如下。老实说,我完全是盲目的。我不确定这是否正确,更不用说是否适合这份工作了。
-(void) initNetworkCommunication
{
//input stream
NSInputStream *iStream;
NSURL *url = [url initWithString:@"192.168.17.1:2004"];
[iStream initWithURL:url];
[iStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[iStream open];
}
所以从我看来,这段代码初始化了流,但是如何从流中读取数据呢?
谢谢
All,
I have a server that has a tcp socket stream for communication. I need to get to that stream and read the initial data that it needs to send me.
My current code is as follows. To be honest, I'm going at this completely blind. I'm not sure if this is correct let alone the right thing for the job.
-(void) initNetworkCommunication
{
//input stream
NSInputStream *iStream;
NSURL *url = [url initWithString:@"192.168.17.1:2004"];
[iStream initWithURL:url];
[iStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[iStream open];
}
So from the way I see it, this code initializes the stream, but how do I read from the stream?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
从流中获取数据有两种方法:轮询和使用流事件。
轮询更简单,但会阻塞正在运行的线程。如果使用此方法,则不需要执行
setDelegate:
或scheduleInRunLoop:forMode:
调用。轮询是通过重复调用read:maxLength:
来执行的。使用流事件需要设置委托并将流添加到运行循环。当某些事件发生时(包括接收数据时),流不会阻塞线程,而是向其委托发送一条
stream:handleEvent:
消息。然后委托可以从流中检索数据。下面是一个stream:handleEvent:
方法示例:There are two ways to get data from a stream: polling and using stream events.
Polling is simpler, but will block the thread it is running in. If you use this method, you don't need to perform the
setDelegate:
orscheduleInRunLoop:forMode:
calls. Polling is performed by repeatedly callingread:maxLength:
.Using stream events requires setting the delegate and adding the stream to a run loop. Instead of blocking the thread, the stream will send a
stream:handleEvent:
message to its delegate when certain events occur, including when it receives data. The delegate can then retrieve the data from the stream. Here is an examplestream:handleEvent:
method:我根据其他一些答案想出了这个。
I came up with this, based on some other answers.