iOS之GCDAsyncUdpSocket

上周说的是tcp socket,这周就来说说udp socket。先介绍下Demo,此次的Demo是用以前看黑马视频写的一个仿QQ聊天的Demo,以它为背景,使用udpSocket,自己给自己发送消息.

同样不说原理了,直接解释代码:

准备工作

#import "GCDAsyncUdpSocket.h"遵守协议声明一个属性@property (strong, nonatomic)GCDAsyncUdpSocket * udpSocket;

创建Socket
_udpSocket = [[GCDAsyncUdpSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
监听接口&接收数据[1]
    NSError * error = nil;
    [_udpSocket bindToPort:udpPort error:&error];
    if (error) {//监听错误打印错误信息
        NSLog(@"error:%@",error);
    }else {//监听成功则开始接收信息
        [_udpSocket beginReceiving:&error];
    }
udp不用连接,故直接发送数据
[_udpSocket sendData:sendData toHost:ipAddress port:udpPort withTimeout:-1 tag:0];

对于toHost的参数ipAddress我说明一下,NSString * ipAddress = [self deviceIPAdress];[self deviceIPAdress]方法就是获取ip地址,具体可参见我另一篇文章《获取iOS设备信息(内存/电量/容量/型号/IP地址)》

看看发送数据结果://此为GCDAsyncUdpSocket代理方法
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didSendDataWithTag:(long)tag
{
    NSLog(@"发送信息成功");
}

- (void)udpSocket:(GCDAsyncUdpSocket *)sock didNotSendDataWithTag:(long)tag dueToError:(NSError *)error
{
    NSLog(@"发送信息失败");
}
发送成功就该接收数据了://此为GCDAsyncUdpSocket代理方法
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext
{
    NSLog(@"接收到%@的消息:%@",address,data);//自行转换格式吧
}

udp果然还是比tcp简单很多啊,到这里就结束了,最后是Demo,欢迎大家Star.

版权声明:本文为 Crazy Steven 原创出品,欢迎转载,转载时请注明出处!


  1. 接收信息有两种方法,[_udpSocket receiveOnce:&error]此方法是一条一条数据接收,用途往往是先发广播,接收到信息后使用TCP进行长连接,故只接收一条数据即可。[_udpSocket beginReceiving:&error]此方法是持续接收,像本Demo是用来聊天,自然是要持续接收信息,故使用此方法进行接收数据。 ↩

你可能感兴趣的:(iOS之GCDAsyncUdpSocket)