1. 通过pod导入
pod 'CocoaAsyncSocket'
2. 创建GCDAsySocket:
self.socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(0, 0)];
注意:这里的并发队列,最好是写自己并发队列,这个队列将影响delegate回调,里面是
同步函数
,为了保证数据先后顺序不变。
3. 连接
[self.socket connectToHost:@"127.0.0.1" onPort:8090 withTimeout:-1 error:&error];
4.代理方法
//已经连接到服务器
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(nonnull NSString *)host port:(uint16_t)port{
NSLog(@"连接成功 : %@---%d",host,port);
// -1 表示无限时长 ,永久不失效,tag标识
[self.socket readDataWithTimeout:-1 tag:10086];
}
// 连接断开
- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err{
NSLog(@"断开 socket连接 原因:%@",err);
}
//已经接收服务器返回来的数据
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
NSLog(@"接收到tag = %ld : %ld 长度的数据",tag,data.length);
[self.socket readDataWithTimeout:-1 tag:10086];
}
//消息发送成功 代理函数 向服务器 发送消息
- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag{
NSLog(@"%ld 发送数据成功",tag);
}
注意:连接成功或者收到消息,必须开始read,否则将无法收到消息,不read的话,缓存区将会被关闭。
网友评论