IOS网络篇14之UIWebView第三方框架PBWeb的使用
2014-10-22 10:32
267 查看
紧接上一篇:
IOS网络篇7之基于第三方CocoaAsyncSocket实现Socket通信(发送图片以及类似http头信息)
一般情况下CFSocket 和NSStream我们不会直接对它进行操作,如果我们用到了这两个部分,那么说明我们使用的已经非常底层了,在开发一些SDK或者修改第三方的框架的时候是需要掌握这些知识的。
服务器端的流程:
(1)创建一个Socket端点
socketid = socket(AF_INET,SOCK_STREAM,0);
ADC Home > Reference Library > Reference > Mac OS X > Mac OS X Man Pages
为socket通信创建一个可以使用的通信端点。AF_INET:指明使用何种通信协议,这里使用的是tcp。
SOCK_STREAM:指明socket通信使用的流。socketid-1 表明socket创建错误。正确返回socket参考接口描述。
(2)初始化socket的参数并且将创建的socket名字绑定在我们刚新建的socket上
memset(&addr,0,sizeof(addr));
addr.sin_len =sizeof(addr);
addr.sin_family =AF_INET;
addr.sin_port =0;
addr.sin_addr.s_addr =INADDR_ANY;
// 将所创建的socket的名字绑定在这个socket上(fd)
bind(fd, (conststructsockaddr
*) &addr,sizeof(addr));
(3)开始监听socket
// 开始监听socket 5表示挂起连接队列中的最大值,如果队列已满,这个时候client会收到ECONNREFUSED。
listen(fd,5);
(4)获取当前使用的socket的名字
getsockname(fd, (structsockaddr *) &addr, &addrLen);
(5)获取一个可用的端口号
// 获取一个可用的socket端口号
port =ntohs(addr.sin_port);
(6)利用本地参数创建一个CFSocketRef 并添加到Runloop中
CFSocketCreateWithNative(
NULL,
fd,
kCFSocketAcceptCallBack,
AcceptCallback,
&context
);
(7)根据第六步中的回调方法开始启动socket对端口的监听,建立socket与nsstream的联系
利用本地文件路径初始化NSOutputStream,即从socket获取的数据先到NSStream,然后从Stream到本地。
[NSOutputStreamoutputStreamToFileAtPath:self.filePathappend:NO];
(8)建立Socket和NSStream的联系
CFStreamCreatePairWithSocket(NULL,
fd, &readStream,NULL);
(__bridgeNSInputStream *) readStream;
注意这里的readStream 是CFReadStreamRef。我们还需要将这个类型转化为NSInputStream。
(9)设置NSStream的各种属性,delegate,打开这个输入流。
[NSSInputstream setProperty:(id)kCFBooleanTrueforKey:(NSString
*)kCFStreamPropertyShouldCloseNativeSocket];
NSSInputstream.delegate
=self;
[NSSInputstreamscheduleInRunLoop:[NSRunLoopcurrentRunLoop]forMode:NSDefaultRunLoopMode];
[NSSInputstreamopen];
(10)回调方法中接收数据
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
这里最重要的一个枚举是:NSStreamEventHasBytesAvailable
bytesRead = [NSInputStream read:buffermaxLength:sizeof(buffer)];
将NSInputStream 流中的数据存储到buffer中。返回读取数据的长度。最大可读maxLength。
[NSOutputStreamwrite:&buffer maxLength:sizeof(buffer)];
将buffer中的数据写入的NSOutputStream中,这里outputstream又关联在一个本地文件中,所以最终写入到本地文件中。
(11)图片展示 :从本地文件中读取
image = [UIImageimageWithContentsOfFile:self.filePath];
客户端流程:这里的输入输出流的作用刚好相反,就不一一描述,有一个地方要注意下:client 建立连接的方法
[[NSNetServicealloc]initWithDomain:@"local."type:@"xxx"name:@"yyy"];
IOS网络篇7之基于第三方CocoaAsyncSocket实现Socket通信(发送图片以及类似http头信息)
一般情况下CFSocket 和NSStream我们不会直接对它进行操作,如果我们用到了这两个部分,那么说明我们使用的已经非常底层了,在开发一些SDK或者修改第三方的框架的时候是需要掌握这些知识的。
服务器端的流程:
(1)创建一个Socket端点
socketid = socket(AF_INET,SOCK_STREAM,0);
ADC Home > Reference Library > Reference > Mac OS X > Mac OS X Man Pages
为socket通信创建一个可以使用的通信端点。AF_INET:指明使用何种通信协议,这里使用的是tcp。
SOCK_STREAM:指明socket通信使用的流。socketid-1 表明socket创建错误。正确返回socket参考接口描述。
(2)初始化socket的参数并且将创建的socket名字绑定在我们刚新建的socket上
memset(&addr,0,sizeof(addr));
addr.sin_len =sizeof(addr);
addr.sin_family =AF_INET;
addr.sin_port =0;
addr.sin_addr.s_addr =INADDR_ANY;
// 将所创建的socket的名字绑定在这个socket上(fd)
bind(fd, (conststructsockaddr
*) &addr,sizeof(addr));
(3)开始监听socket
// 开始监听socket 5表示挂起连接队列中的最大值,如果队列已满,这个时候client会收到ECONNREFUSED。
listen(fd,5);
(4)获取当前使用的socket的名字
getsockname(fd, (structsockaddr *) &addr, &addrLen);
(5)获取一个可用的端口号
// 获取一个可用的socket端口号
port =ntohs(addr.sin_port);
(6)利用本地参数创建一个CFSocketRef 并添加到Runloop中
CFSocketCreateWithNative(
NULL,
fd,
kCFSocketAcceptCallBack,
AcceptCallback,
&context
);
(7)根据第六步中的回调方法开始启动socket对端口的监听,建立socket与nsstream的联系
利用本地文件路径初始化NSOutputStream,即从socket获取的数据先到NSStream,然后从Stream到本地。
[NSOutputStreamoutputStreamToFileAtPath:self.filePathappend:NO];
(8)建立Socket和NSStream的联系
CFStreamCreatePairWithSocket(NULL,
fd, &readStream,NULL);
(__bridgeNSInputStream *) readStream;
注意这里的readStream 是CFReadStreamRef。我们还需要将这个类型转化为NSInputStream。
(9)设置NSStream的各种属性,delegate,打开这个输入流。
[NSSInputstream setProperty:(id)kCFBooleanTrueforKey:(NSString
*)kCFStreamPropertyShouldCloseNativeSocket];
NSSInputstream.delegate
=self;
[NSSInputstreamscheduleInRunLoop:[NSRunLoopcurrentRunLoop]forMode:NSDefaultRunLoopMode];
[NSSInputstreamopen];
(10)回调方法中接收数据
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
这里最重要的一个枚举是:NSStreamEventHasBytesAvailable
bytesRead = [NSInputStream read:buffermaxLength:sizeof(buffer)];
将NSInputStream 流中的数据存储到buffer中。返回读取数据的长度。最大可读maxLength。
[NSOutputStreamwrite:&buffer maxLength:sizeof(buffer)];
将buffer中的数据写入的NSOutputStream中,这里outputstream又关联在一个本地文件中,所以最终写入到本地文件中。
(11)图片展示 :从本地文件中读取
image = [UIImageimageWithContentsOfFile:self.filePath];
客户端流程:这里的输入输出流的作用刚好相反,就不一一描述,有一个地方要注意下:client 建立连接的方法
[[NSNetServicealloc]initWithDomain:@"local."type:@"xxx"name:@"yyy"];
相关文章推荐
- iOS边练边学--多线程练习的多图片下载 以及 使用第三方框架(SDWebImage)的多图片下载
- iOS第三方框架: 使用SDWebImage 加载不出图片
- iOS 第三方框架SDWebImage的简单使用
- iOS 第三方框架SDWebImage的简单使用
- ios第三方开源框架学习——SDWebImage的使用
- iOS开发网络篇 一一 SDWebImage框架的基本使用
- iOS 第三方框架SDWebImage的简单使用
- iOS 第三方框架 - SDWebImage 原理及使用
- 【iOS开发】关于图片加载的第三方框架SDWebImage的使用
- 网易新闻客户端iOS版使用的开源第三方框架
- IOS界面UI设计9之常用工具包category、常用第三方框架的使用
- IOS webView 与JavaScriptCore 框架结合使用
- 【iOS开发-96】网络请求总结,深浅拷贝copy和mutableCopy,SDWebImage图像下载第三方框架
- iOS开发网络篇—简单介绍ASI框架的使用
- iso中第三方框架SDWebImage的使用步骤
- iOS网络请求第三方框架:MKNetworkKit介绍及简单使用
- iOS 第三方框架SDWebImage学习
- iOS开发网络篇—简单介绍ASI框架的使用
- iOS开发网络篇—简单介绍ASI框架的使用
- IOS文件解析 之第三方框架Hpple的简单使用