上周说的是tcp socket,这周就来说说udp socket。先介绍下Demo,此次的Demo是用以前看黑马视频写的一个仿QQ聊天的Demo,以它为背景,使用udpSocket,自己给自己发送消息.
同样不说原理了,直接解释代码:
准备工作
#import "GCDAsyncUdpSocket.h"
遵守协议<GCDAsyncUdpSocketDelegate>
声明一个属性@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 原创出品,欢迎转载,转载时请注明出处!
-
接收信息有两种方法,[_udpSocket receiveOnce:&error]此方法是一条一条数据接收,用途往往是先发广播,接收到信息后使用TCP进行长连接,故只接收一条数据即可。[_udpSocket beginReceiving:&error]此方法是持续接收,像本Demo是用来聊天,自然是要持续接收信息,故使用此方法进行接收数据。 ↩