上周說的是tcp socket,這周就來說說udp socket。先介紹下Demo,此次的Demo是用以前看黑馬視頻寫的一個仿QQ聊天的Demo,以它為背景,使用udpSocket,自己給自己發(fā)送消息.
同樣不說原理了,直接解釋代碼:
準(zhǔn)備工作
#import "GCDAsyncUdpSocket.h"遵守協(xié)議<GCDAsyncUdpSocketDelegate>聲明一個屬性@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)聽錯誤打印錯誤信息
NSLog(@"error:%@",error);
}else {//監(jiān)聽成功則開始接收信息
[_udpSocket beginReceiving:&error];
}
udp不用連接,故直接發(fā)送數(shù)據(jù)
[_udpSocket sendData:sendData toHost:ipAddress port:udpPort withTimeout:-1 tag:0];
對于toHost的參數(shù)ipAddress我說明一下,NSString * ipAddress = [self deviceIPAdress];[self deviceIPAdress]方法就是獲取ip地址,具體可參見我另一篇文章《獲取iOS設(shè)備信息(內(nèi)存/電量/容量/型號/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é)束了,最后是Demo,歡迎大家Star.
版權(quán)聲明:本文為 Crazy Steven 原創(chuàng)出品,歡迎轉(zhuǎn)載,轉(zhuǎn)載時請注明出處!
-
接收信息有兩種方法,[_udpSocket receiveOnce:&error]此方法是一條一條數(shù)據(jù)接收,用途往往是先發(fā)廣播,接收到信息后使用TCP進(jìn)行長連接,故只接收一條數(shù)據(jù)即可。[_udpSocket beginReceiving:&error]此方法是持續(xù)接收,像本Demo是用來聊天,自然是要持續(xù)接收信息,故使用此方法進(jìn)行接收數(shù)據(jù)。 ?