iOS- 移动端Socket UDP协议广播机制的实现_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > iOS- 移动端Socket UDP协议广播机制的实现

iOS- 移动端Socket UDP协议广播机制的实现

 2014/6/12 19:17:22  清澈Saup  程序员俱乐部  我要评论(0)
  • 摘要:1.前言什么是UDP协议广播机制?举一个例,例如在一群人群中,一个人要找张三,于是你向人群里大喊一声(广播):“谁是张三”如果它是张三,它就会回应你,在网络中也是一样的。UDP广播机制的应用场景:若干个客户端,在局域网内(不知道IP的情况下)需要在很多设备里需找特有的设备,比如服务器,抑或是某个打印机,传真机等。假设我现在准备将服务器装在永不断电的iPad上。若干个客户端iPhone一激活,就要来向所有设备广播,谁是服务器,是服务器的话,请把IP地址告诉我
  • 标签:实现 iOS 协议 socket

1.前言  

   什么是UDP协议广播机制?      举一个例, 例如在一群人群中,一个人要找张三,于是你向人群里大喊一声(广播):“谁是张三”   如果它是张三,它就会回应你,在网络中也是一样的。        UDP广播机制的应用场景:       若干个客户端,在局域网内(不知道IP的情况下) 需要在很多设备里需找特有的设备,比如服务器,抑或是某个打印机,传真机等。          假设我现在准备将服务器装在永不断电的iPad上。     若干个客户端iPhone 一激活,就要来向所有设备广播,谁是服务器,是服务器的话,请把IP地址告诉我。然后我就去连接,然后进入长连接,后台接受消息。

 

2.UDP广播机制的实现  

注:  iPad:服务器端  iPhone:客户端  

2.1.服务器端(iPad)的实现  


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

www.github.com

2.1.2.初始化udp  

class="brush:objc;gutter:true;">@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]; 

 

作者: 清澈Saup
出处: http://www.cnblogs.com/qingche/
本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。

     
发表评论
用户名: 匿名