iOS- 移動端Socket UDP協議廣播機制的實現 – iPhone手機開發技術文章 iPhone軟體開發教學課程

1.前言  

   什麼是UDP協議廣播機制?

 

   舉一個例, 例如在一群人群中,一個人要找張三,於是你向人群裡大喊一聲(廣播):“誰是張三”

  如果它是張三,它就會回應你,在網絡中也是一樣的。

 

 

   UDP廣播機制的應用場景:

 

    若幹個客戶端,在局域網內(不知道IP的情況下) 需要在很多設備裡需找特有的設備,比如服務器,抑或是某個打印機,傳真機等。

    

    假設我現在準備將服務器裝在永不斷電的iPad上。

    若幹個客戶端iPhone 一激活,就要來向所有設備廣播,誰是服務器,是服務器的話,請把IP地址告訴我。然後我就去連接,然後進入長連接,後臺接受消息。

 

 

2.UDP廣播機制的實現  

註:

 iPad:服務器端  iPhone:客戶端

 

2.1.服務器端(iPad)的實現  

 

 

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];

 

//啟動接收線程

 

 [asyncUdpSocket receiveWithTimeout:-1 tag:0];

 2.1.4.實現代理方法  

 

 

//已接收到消息

– (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{

    if(data是找服務器的){

              //根據客戶端給的IP,利用TCP或UDP 相互連接上就可以開始通訊瞭 

        

     }  return YES;

}

//沒有接受到消息

-(void)onUdpSocket:(AsyncUdpSocket *)sock didNotReceiveDataWithTag:(long)tag dueToError:(NSError *)error{

}

//沒有發送出消息

-(void)onUdpSocket:(AsyncUdpSocket *)sock didNotSendDataWithTag:(long)tag dueToError:(NSError *)error{

 }

//已發送出消息

-(void)onUdpSocket:(AsyncUdpSocket *)sock didSendDataWithTag:(long)tag{

}

//斷開連接

-(void)onUdpSocketDidClose:(AsyncUdpSocket *)sock{

}

 

 

2.2.客戶端(iPhone)的實現  

註:實現步驟與服務器端相似

 

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.實現代理方法  

 

 

//已接收到消息

– (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{

 return YES;}

//沒有接受到消息

-(void)onUdpSocket:(AsyncUdpSocket *)sock didNotReceiveDataWithTag:(long)tag dueToError:(NSError *)error{

}

//沒有發送出消息

-(void)onUdpSocket:(AsyncUdpSocket *)sock didNotSendDataWithTag:(long)tag dueToError:(NSError *)error{

 }

//已發送出消息

-(void)onUdpSocket:(AsyncUdpSocket *)sock didSendDataWithTag:(long)tag{

}

//斷開連接

-(void)onUdpSocketDidClose:(AsyncUdpSocket *)sock{

}

 

 

2.2.4.廣播尋找  

 

註:廣播iP地址為 255.255.255.255

 

 

NSString *str = @"誰是服務器?我的IP是:192.168.80.103";

 

NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding];

 

[asyncUdpSocket sendData:data

                   toHost:@"255.255.255.255

                     port:9527

              withTimeout:-1  

                      tag:0]; 

 

You May Also Like