iOS开发之利用AsyncSocket实现即时通信(一)
来源:互联网 发布:java大学基础教程 编辑:程序博客网 时间:2024/06/05 19:09
AsyncSocket简介
在实现App的时候经常需要进行实时的网络通信,也就是即时通信。
实现即时通信的方式很多,可以利用极光、融云等即时通信平台进行通信,也可以利用一些打包类进行简单的即时通信。这些打包类也有很多,例如GCDAsyncSocket,AsyncSocket等等,但他们的使用方法都是共通的。这里以AsyncSocket为例,讲解一下其使用过程。
AsyncSocket是一套开源的网络访问类库。 iphone的标准推荐CFNetwork C库编程.但是编程比较麻烦。在其它OS往往用类来封装的对Socket函数的处理。比如MFC的CAsysncSocket,Java里面的Socket和SocketServer.在iphone也有类似于开源项目,就是AsyncSocket库, 官方网站:http://code.google.com/p/cocoaasyncsocket/ 它用来简化CFnetwork的调用.
AsyncSocket的基本使用
在项目引入ASyncSocket库
1.下载ASyncSocket库源码
2.把ASyncSocket库源码加入项目:
只需要增加RunLoop目录中的AsyncSocket.h、AsyncSocket.m、AsyncUdpSocket.h和AsyncUdpSocket.m四个文件。
3.在项目增加CFNetwork框架
在Framework目录右健,选择Add—>Existing Files…, 选择 CFNetwork.framework
连接服务器
首先引入头文件,声明一个AsyncSocket对象,再调用connection与服务器建立连接,代码如下:
import “AsyncSocket.h”
然后就是与服务器建立链接了
// socket连接-(void)socketConnectHost{ self.socket = [[AsyncSocket alloc] initWithDelegate:self]; NSError *error = nil; [self.socket connectToHost:self.socketHost onPort:self.socketPort withTimeout:3 error:&error];}与Java中的客户端部分代码相似,AsyncSocket代码也需要指定服务端地址和服务端口.####发送数据发送数据的代码很简单
NSString longConnect = @”longConnect”;NSData dataStream = [longConnect dataUsingEncoding:NSUTF8StringEncoding];[self.socket writeData:dataStream withTimeout:1 tag:1];AsyncSocket向服务器发送数据都是先将数据转换生成二进制的data数据,再向服务端进行发送的。####接收数据为了收到socket的消息,我们需要在长连接方法中进行读取数据
[self.socket readDataWithTimeout:30 tag:0];
如果得到数据,会调用回调方法
-(void)onSocket:(AsyncSocket )sock didReadData:(NSData )data withTag:(long)tag{ // 对得到的data值进行解析与转换即可}
AsyncSocket的中级使用
在进行通信的时候经常会遇到一些不可抗力的因素,例如:服务端崩溃,手机端App闪退,手机断网了等等各种导致连接断开,而一个优秀的App是不应该允许这些情况影响用户体验的。
这个时候可以采取的一种方式是:创建一个类,继承AsyncSocket,重写他的下列方法。
// Disconnect Implementation
(void)closeWithError:(NSError *)err;
(void)recoverUnreadData;
(void)emptyQueues;
(void)close;
在对应的方法中进行相应的容错处理就可以了。
- iOS开发之利用AsyncSocket实现即时通信(一)
- iOS开发之使用XMPPFramework实现即时通信(一)
- iOS开发之使用XMPPFramework实现即时通信(一)
- iOS开发之使用XMPPFramework实现即时通信(一)
- iOS开发之使用XMPPFramework实现即时通信(一)
- iOS开发之使用XMPPFramework实现即时通信(二)
- iOS开发之使用XMPPFramework实现即时通信(三)
- iOS开发之使用XMPPFramework实现即时通信(二)
- iOS开发之使用XMPPFramework实现即时通信(二)
- iOS开发之使用XMPPFramework实现即时通信(三)
- iOS开发之使用XMPPFramework实现即时通信(二)
- iOS开发之使用XMPPFramework实现即时通信(三)
- iOS开发之AsyncSocket使用
- iOS开发-即时通信XMPP
- iOS之即时通信 XMPP
- IOS 开发之Cocoa AsyncSocket学习 .
- iOS开发之AsyncSocket使用教程
- iOS开发之AsyncSocket使用教程
- vfs dcache函数
- c++11多线程(十七):实战总结
- spring-mvc
- javascipt模块化编程(速记)
- 4.3. The range() Function(range 函数)
- iOS开发之利用AsyncSocket实现即时通信(一)
- SpringMVC各类jar包使用详解
- 业务降级,系统限流-流量控制与令牌桶算法
- 通过Js来获取所有屏幕分辨率的总结
- 欢迎使用CSDN-markdown编辑器
- 邮件开发:发送程序
- NAT简单实例,教会你如何配置访问内部开发环境
- 利用虚拟网桥实现Docker容器的跨主机访问
- 假如和你相亲的姑娘浑身上下各种名牌奢侈品,拿着玫瑰金,而且没什么正经工作,恭喜你小伙子,你中奖了!