国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

iOS-移動(dòng)端SocketUDP協(xié)議廣播機(jī)制的實(shí)現(xiàn)

2019-11-14 20:24:29
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1.前言  

   什么是UDP協(xié)議廣播機(jī)制?
 
   舉一個(gè)例, 例如在一群人群中,一個(gè)人要找張三,于是你向人群里大喊一聲(廣播):“誰(shuí)是張三”
  如果它是張三,它就會(huì)回應(yīng)你,在網(wǎng)絡(luò)中也是一樣的。
 
 
   UDP廣播機(jī)制的應(yīng)用場(chǎng)景:
 
    若干個(gè)客戶端,在局域網(wǎng)內(nèi)(不知道ip的情況下) 需要在很多設(shè)備里需找特有的設(shè)備,比如服務(wù)器,抑或是某個(gè)打印機(jī),傳真機(jī)等。
    
    假設(shè)我現(xiàn)在準(zhǔn)備將服務(wù)器裝在永不斷電的iPad上。
    若干個(gè)客戶端iPhone 一激活,就要來(lái)向所有設(shè)備廣播,誰(shuí)是服務(wù)器,是服務(wù)器的話,請(qǐng)把IP地址告訴我。然后我就去連接,然后進(jìn)入長(zhǎng)連接,后臺(tái)接受消息。

 

2.UDP廣播機(jī)制的實(shí)現(xiàn)  

注:
 iPad:服務(wù)器端  iPhone:客戶端
 

2.1.服務(wù)器端(iPad)的實(shí)現(xiàn)  


2.1.1.先去github上下載 AsyncUdpSocket.h框架包  

www.github.com

2.1.2.初始化udp  

@interface QCViewController (){	 AsyncUdpSocket *asyncUdpSocket;}      asyncUdpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];

2.1.3.綁定端口  

   NSError *err = nil;    [asyncUdpSocket enableBroadcast:YES error:&err];    [asyncUdpSocket bindToPort:9527 error:&err];   //啟動(dòng)接收線程    [asyncUdpSocket receiveWithTimeout:-1 tag:0];

 2.1.4.實(shí)現(xiàn)代理方法  

//已接收到消息- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{    if(data是找服務(wù)器的){              //根據(jù)客戶端給的IP,利用TCP或UDP 相互連接上就可以開(kāi)始通訊了             }  return YES;}//沒(méi)有接受到消息-(void)onUdpSocket:(AsyncUdpSocket *)sock didNotReceiveDataWithTag:(long)tag dueToError:(NSError *)error{}//沒(méi)有發(fā)送出消息-(void)onUdpSocket:(AsyncUdpSocket *)sock didNotSendDataWithTag:(long)tag dueToError:(NSError *)error{ }//已發(fā)送出消息-(void)onUdpSocket:(AsyncUdpSocket *)sock didSendDataWithTag:(long)tag{}//斷開(kāi)連接-(void)onUdpSocketDidClose:(AsyncUdpSocket *)sock{}

 

2.2.客戶端(iPhone)的實(shí)現(xiàn)  

注:實(shí)現(xiàn)步驟與服務(wù)器端相似

2.2.1.初始化udp   

@interface QCViewController (){	 AsyncUdpSocket *asyncUdpSocket;}      asyncUdpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];

2.2.2.綁定端口    

   NSError *err = nil;    [asyncUdpSocket enableBroadcast:YES error:&err];    [asyncUdpSocket bindToPort:9527 error:&err];

2.2.3.實(shí)現(xiàn)代理方法  

//已接收到消息- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{ return YES;}//沒(méi)有接受到消息-(void)onUdpSocket:(AsyncUdpSocket *)sock didNotReceiveDataWithTag:(long)tag dueToError:(NSError *)error{}//沒(méi)有發(fā)送出消息-(void)onUdpSocket:(AsyncUdpSocket *)sock didNotSendDataWithTag:(long)tag dueToError:(NSError *)error{ }//已發(fā)送出消息-(void)onUdpSocket:(AsyncUdpSocket *)sock didSendDataWithTag:(long)tag{}//斷開(kāi)連接-(void)onUdpSocketDidClose:(AsyncUdpSocket *)sock{}

 

2.2.4.廣播尋找  

注:廣播iP地址為 255.255.255.255

       NSString *str = @"誰(shuí)是服務(wù)器?我的IP是:192.168.80.103";       NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding];       [asyncUdpSocket sendData:data                          toHost:@"255.255.255.255                            port:9527                     withTimeout:-1                               tag:0]; 

 

作者: 清澈Saup
出處: http://www.survivalescaperooms.com/qingche/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接。

 
 
 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 朔州市| 武穴市| 宜黄县| 桐柏县| 盘锦市| 敖汉旗| 宁河县| 仁布县| 枣庄市| 文安县| 犍为县| 河池市| 理塘县| 义马市| 射洪县| 青岛市| 南乐县| 陈巴尔虎旗| 香格里拉县| 大方县| 宜城市| 民乐县| 寿光市| 云林县| 丰顺县| 万山特区| 固原市| 海安县| 贵溪市| 武义县| 绥化市| 肃宁县| 高清| 宁都县| 中西区| 石阡县| 贵南县| 桃园市| 疏勒县| 体育| 收藏|