AsyncSocket 使用

  今天使用AsyncSocket模拟及时通信,在这里记录一下,免得以后自己又犯相同的错误

  1>创建客户端和服务器socket

 1 /**
 2  *  设置socket
 3  */
 4 - (void)setupSocket
 5 {
 6     //1.客户端socket
 7     _clientSocket = [[AsyncSocket alloc] initWithDelegate:self];
 8     //2. 启用定时器连接服务器
 9
10     [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(tryToConnect:) userInfo:nil repeats:YES];
11
12     //3.实例化服务器
13     _serverSocket = [[AsyncSocket alloc] initWithDelegate:self];
14
15     [_serverSocket acceptOnPort:8888 error:nil];
16 }

  定时器代码:

 1 - (void)tryToConnect:(NSTimer *)timer
 2 {
 3     if ([_clientSocket isConnected]) {
 4         [timer invalidate];
 5         return;
 6     }
 7     NSString *host = @"10.0.185.132";
 8     UInt16 port = 8080;
 9     [_clientSocket connectToHost:host onPort:port withTimeout:-1 error:nil];
10 }

  2>实现协议回调方法

 1 #pragma mark - socket协议
 2
 3 - (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket
 4 {
 5     NSLog(@"接收到新的socket连接");
 6     [_connectArray addObject:newSocket];
 7     [newSocket readDataWithTimeout:-1 tag:300];
 8 }
 9 /*
10  * 客户端连接服务器失败时的回调
11  */
12 - (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err
13 {
14     NSLog(@"客户端连接失败,错误信息:%@", [err localizedDescription]);
15 }
16
17 /*
18  * 客户端连接服务器成功时的回调
19  */
20 - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
21 {
22     NSLog(@"客户端连接成功:host:%@ port :%d", host, port);
23 }
24
25 //接收客户端发送过来的数据
26
27 - (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
28 {
29     NSString *message =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
30
31     [self sendMessage:message messageType:MessageTypeOther];
32
33     //特别注意这句话一定要写,不然只会读取第一条数据,写这句话表示不停的等待读取数据
34     [sock readDataWithTimeout:-1 tag:300];
35 }

  3>发送信息

 1 NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding];
 2
 3     //发送消息
 4     if ([_clientSocket isConnected]) {
 5         [_clientSocket writeData:data withTimeout:60 tag:100];
 6
 7     }else{
 8         NSLog(@"连接断开");
 9         //尝试重新连接
10         [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(tryToConnect:) userInfo:nil repeats:YES];
11     }
时间: 2024-11-07 15:38:09

AsyncSocket 使用的相关文章

iphone使用开源代码Asyncsocket进行socket编程

iphone的标准推荐CFNetwork C库编程.但是编程比较烦躁.在其它OS往往用类来封装的对Socket函数的处理.比如MFC的CAsysncSocket.在iphone也有类似于开源项目.cocoa AsyncSocket库, 官方网站:http://code.google.com/p/cocoaasyncsocket/;它用来简化CFnetwork的调用. 一.在项目引入ASyncSocket库 1.下载ASyncSocket库源码 2.把ASyncSocket库源码加入项目:只需要增

iOS开发之即时通讯之Socket(AsyncSocket)

在实际开发中,主要的任务是开发客户端.所以下面主要详解客户端的整个连接建立过程,以及在说明时候回调哪些函数. 常用方法: 1.建立连接 - (int)connectServer:(NSString *)hostIP port:(int)hostPort 2.连接成功后,会回调的函数 - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port 3.发送数据 - (void)writ

MAC OS/IOS Socket编程之AsyncSocket

最近在做越狱状态下的IOS后台监控软件,后台守护进程将取得的数据通过TCP发送到服务器,通过查阅资料了解到IOSsocket编程推荐使用公开的类库AsyncSocket,使用该类库极大的方便了socket的操作,下面开始介绍. 1.Socket简介 socket是应用层与TCP/IP协议簇通信的中间软件抽象层,它是一组接口.Socket描述了一个IP.端口对,它简化了程序员的操作,知道对方的IP以及PORT就可以给对方发送消息,再由服务器端来处理发送的这些消息.所以,Socket一定包含了通信的

IOS socket编程--Asyncsocket

iPhone的标准推荐是CFNetwork 库编程,其封装好的开源库是 cocoa AsyncSocket库,用它来简化CFNetwork的调用,它提供了异步操作 主要特性有: 队列的非阻塞的读和写,而且可选超时.你可以调用它读取和写入,它会当完成后告知你 自动的socket接收.如果你调用它接收连接,它将为每个连接启动新的实例,当然,也可以立即关闭这些连接 委托(delegate)支持.错误.连接.接收.完整的读取.完整的写入.进度以及断开连接,都可以通过委托模式调用 基于run loop的,

iOS_SN_Socket - AsyncSocket

转载文章,原地址:http://yimouleng.com/2015/02/04/Socket-AsyncSocket/ 一.前言 公司的项目用到了Socket编程,之前在学习的过程当中,用到的更多的还是http请求的方式.但是既然用到了就必须学习一下,所以就在网上找一些例子,然后想自己写一个demo.可是发现很多写iOS Socket的博客并没有很详细的说明,也可能是大神们觉得其他东西都浅显易懂. 自己专研了一下,将自己的一些理解总结出来,一方面整理自己的学习思路,另一方面,为一些和我有同样困

AsyncSocket长连接棒包装问题解决

project正在使用长连接快来server沟通.因此,指定我们的协议前两个字节为数据长度来区分数据包 app这边数据有两种传输形式: 1.app主动请求所须要的数据: 2.app异步接收来自服务端的推送消息,也就是app这边没有请求.服务端主动发送数据到appclient. 整个app执行期间,它们都是在同一个连接上完毕的传输数据.因此会出现下面的问题: 1.server传输数据过快,出现粘包的问题,比如 1.1服务端一次发来多个推送消息: 1.2网络不稳定,client连续发送多个请求cli

AsyncSocket开启socket编程

服务器的方式要进行修改,改成sockt的,所以,往服务器传数据的方式,也要进行修改.查找相关库,找到了AsyncSocket库,果然不错. 1)首先向代码中加入AsyncSocket库.最好的加入方式,是把库的包放在工程的文件夹里.然后,在代码中右击加入到工程里面. 2)AsyncSocket库加入好后,运行一下代码,看有没有错误.这个时候通常是会有错误的.不用着急,这是ARC是其中捣鬼.我们只需在BuildPhases-->CompileSources->找到库的相关文件.然后,在其后面加上

IOS AsyncSocket

导入AsyncSocket.h  AsyncSocket.m   AsyncUdpSocket.h   AsyncUdpSocket.m   以及  CFNetWork.framework asyncSocket = [[AsyncSocketalloc] initWithDelegate:self]; NSError *err = nil; if(![asyncSocketconnectToHost:@"www.baidu.com"onPort:80error:&err])

关于这几天使用IOS的AsyncSocket完成无限后台的过程

这几天用了下ASyncSocket完成前后台即时通讯,当时有想过用消息推送的技术实现的,可是后来想到消息推送的不可靠性还是算了.于是使用了tcp/ip实现后台主动发送数据给前台的功能. 最开始设计后台的时候,我有考虑到数据量比较大的问题,所以数据大的时候我会使用分包和组包的功能去实现.TCP/IP在传输数据的时候,一般不会大于1500字节,所以我每512字节分了 一个包.然后当一次性数据包接收太多的时候,就出现了粘包的问题.因为我在数据传输的时候使用的是json,每一个分包都是由{}括起来的,所