上周說的是tcp socket,這周就來說說udp socket。先介紹下Demo库说,此次的Demo是用以前看黑馬視頻寫的一個(gè)仿QQ聊天的Demo,以它為背景,使用udpSocket,自己給自己發(fā)送消息.
同樣不說原理了,直接解釋代碼:
準(zhǔn)備工作
#import "GCDAsyncUdpSocket.h"
遵守協(xié)議<GCDAsyncUdpSocketDelegate>
聲明一個(gè)屬性@property (strong, nonatomic)GCDAsyncUdpSocket * udpSocket;
創(chuàng)建Socket
_udpSocket = [[GCDAsyncUdpSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
監(jiān)聽接口&接收數(shù)據(jù)[1]
NSError * error = nil;
[_udpSocket bindToPort:udpPort error:&error];
if (error) {//監(jiān)聽錯(cuò)誤打印錯(cuò)誤信息
NSLog(@"error:%@",error);
}else {//監(jiān)聽成功則開始接收信息
[_udpSocket beginReceiving:&error];
}
udp不用連接,故直接發(fā)送數(shù)據(jù)
[_udpSocket sendData:sendData toHost:ipAddress port:udpPort withTimeout:-1 tag:0];
對(duì)于toHost的參數(shù)ipAddress我說明一下,NSString * ipAddress = [self deviceIPAdress];
[self deviceIPAdress]方法就是獲取ip地址撑帖,具體可參見我另一篇文章《獲取iOS設(shè)備信息(內(nèi)存/電量/容量/型號(hào)/IP地址)》
看看發(fā)送數(shù)據(jù)結(jié)果://此為GCDAsyncUdpSocket代理方法
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didSendDataWithTag:(long)tag
{
NSLog(@"發(fā)送信息成功");
}
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didNotSendDataWithTag:(long)tag dueToError:(NSError *)error
{
NSLog(@"發(fā)送信息失敗");
}
發(fā)送成功就該接收數(shù)據(jù)了://此為GCDAsyncUdpSocket代理方法
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext
{
NSLog(@"接收到%@的消息:%@",address,data);//自行轉(zhuǎn)換格式吧
}
udp果然還是比tcp簡(jiǎn)單很多啊豌拙,到這里就結(jié)束了驻呐,最后是Demo,歡迎大家Star.
版權(quán)聲明:本文為 Crazy Steven 原創(chuàng)出品毁渗,歡迎轉(zhuǎn)載践磅,轉(zhuǎn)載時(shí)請(qǐng)注明出處!
-
接收信息有兩種方法,[_udpSocket receiveOnce:&error]此方法是一條一條數(shù)據(jù)接收,用途往往是先發(fā)廣播,接收到信息后使用TCP進(jìn)行長連接灸异,故只接收一條數(shù)據(jù)即可府适。[_udpSocket beginReceiving:&error]此方法是持續(xù)接收,像本Demo是用來聊天,自然是要持續(xù)接收信息,故使用此方法進(jìn)行接收數(shù)據(jù)。 ?