天天看点

iOS网络编程实践--NSStream实现TCP Socket iPhone客户端

客户端我们使用iphone应用程序,画面比较简单。点击发送按钮,给服务器发送一些字符串过去。点击接收按钮就会从服务器读取一些字符串,并且显示在画面上。

iOS网络编程实践--NSStream实现TCP Socket iPhone客户端

有关客户端应用的ui部分不再介绍了,我们直接看代码部分,socket客户端可以采用cfstream或nsstream实现。为了给读者介绍更多的知识,本例我们采用nsstream实现。nsstream实现采用objective-c语言,一些面向对象的类。

下面我们看看客户端视图控制器viewcontroller.h

定义属性inputstream和outputstream,它们输入流nsinputstream和输出流nsoutputstream类。它们与服务器cfstream实现中的输入流cfreadstreamref和输出流cfwritestreamref对应的。

视图控制器viewcontroller.m的初始化网络方法initnetworkcommunication代码:

它们都调用initnetworkcommunication方法,并设置操作标识flag,如果flag为0发送数据,flag为1接收数据。

流的状态的变化触发很多事件,并回调nsstreamdelegate协议中定义的方法stream:handleevent:,其代码如下:

在读取数据分支(nsstreameventhasbytesavailable)中,代码第①行为读取数据准备缓冲区,本例中设置的是1024个字节,这个大小会对流的读取有很多的影响。第②行代码使用hasbytesavailable方法判断是否流有数据可以读,如果有可读数据就进行循环读取。第③行代码使用流的read:maxlength:方法读取数据到缓冲区,第1个参数是缓冲区对象buffer,第2个参数是读取的缓冲区的字节长度。

在写入数据分支(nsstreameventhasspaceavailable)中,代码第④行是要写入的数据,第⑤行代码[_outputstream write:buff maxlength: strlen((const char*)buff)+1]是写如数据方法。

第⑥和第⑦行代码[self close]调用close方法关闭,close方法代码如下: