IOS开发之利用AsyncSocket实现即时通信(一)

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;

在对应的方法中进行相应的容错处理就可以了。

转载于:https://www.cnblogs.com/yckcoder/p/5109480.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值