博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈CocoaAsyncSocket
阅读量:6211 次
发布时间:2019-06-21

本文共 1550 字,大约阅读时间需要 5 分钟。

因为项目中需要使用Socket进行数据传输,所以简单介绍一样使用CocoaAsyncSocket的心得。

一.CocoaAsyncSocket介绍

CocoaAsyncSocket中主要包含两个类:

1.GCDAsyncSocket.//基于TCP/IP协议的socket网络库

2.GCDAsyncUdpSocket.//基于UDP/IP协议的socket网络库

二.Client端使用

1.需要导入GCDAsyncUdpSocketDelegate或者GCDAsyncSocketDelegate协议

2.声明属性

@property (strong, nonatomic) GCDAsyncSocket *clientSocket;复制代码

3.创建对象

self.clientSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];复制代码

4.连接指定主机的对应端口

//address和port自定义NSError *error = nil;self.connected = [self.clientSocket connectToHost:self.address onPort:self.port viaInterface:nil withTimeout:-1 error:&error];复制代码

5.连接成功

- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port {//    NSLog(@"连接主机端口%@", sock);     // 连接后,可读取服务端的数据 第一次读取数据 timeout为-1代表一直等    [self.clientSocket readDataWithTimeout:-1 tag:0];}复制代码

6.发送数据

- (void)sendMessage:(id)msg{    //最终数据都需要转成NSData对象进行传输,这里只是举例    NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];    // Timeout -1 : 无穷大,一直等    // tag : 消息标记    [self.clientSocket writeData:data withTimeout:-1 tag:0];}复制代码

7.读取数据

- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {    // 读取到服务端数据值后,能一直读取    [self.clientSocket readDataWithTimeout:- 1 tag:0];}复制代码

8.断开连接

- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err{    //断开的时候把代理和本身都置nil    self.clientSocket.delegate = nil;    self.clientSocket = nil;}复制代码

最后讲一下粘包的处理思路,socket传输的都是数据流,不一定是你想要的一整条数据,这时候就需要对数据做处理。创建一个缓冲区,存放收到的所有数据,够一条拿走,从缓冲区删掉,不够一条数据就暂存。

转载地址:http://atcja.baihongyu.com/

你可能感兴趣的文章
富士通推迟与联想业务整合计划:时间或为下个月
查看>>
印度光伏市场潜力巨大 正信光电拟积极扩大市场占有率
查看>>
福建将发展“智慧气象” 融入智慧城市建设
查看>>
智能家居几番追寻残缺依旧 山尽头才是海
查看>>
开放生态,智能联接——新华三绿洲平台起航
查看>>
下半年,定制智能家居会出现三大风暴?
查看>>
最新调查表明OpenStack的普及呈强劲势头,但复杂性依然存在
查看>>
任正非蜕变:追逐滚滚洪流中的那张船票
查看>>
数据中心节能从机房精密空调着手
查看>>
美国防部启动“黑掉陆军”网络纠错活动
查看>>
立法保护关键信息基础设施意义重大
查看>>
微软良心伙伴,OneDrive首发支持iOS11的文件App
查看>>
上海:“智慧城市”愿景正在走进现实
查看>>
张晓丹:新一代两地三中心多活系统实践
查看>>
打击假新闻真的会伤害Facebook的生意吗?
查看>>
光伏发电如何破局“十三五”?
查看>>
爱立信CTO在乌镇:“5G与物联网推动互联网未来发展”
查看>>
面对大数据与“工业4.0”时代 我们该做些什么?
查看>>
斯诺登称特朗普当选是美国历史的“黑暗时刻” 但不是结束
查看>>
软银与ARM联合公开信:ARM已成软银集团一员 业务如常
查看>>