首页 > 代码库 > iOS- 移动端Socket UDP协议广播机制的实现
iOS- 移动端Socket UDP协议广播机制的实现
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
?
1 2 3 4 | @interface QCViewController (){ AsyncUdpSocket *asyncUdpSocket; } asyncUdpSocket = [[AsyncUdpSocket alloc] initWithDelegate: self ]; |
2.1.3.绑定端口
?
1 2 3 4 5 6 7 8 | NSError *err = nil ; [asyncUdpSocket enableBroadcast: YES error:&err]; [asyncUdpSocket bindToPort:9527 error:&err]; //启动接收线程 [asyncUdpSocket receiveWithTimeout:-1 tag:0]; |
2.1.4.实现代理方法
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | //已接收到消息 - ( 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
?
1 2 3 4 | @interface QCViewController (){ AsyncUdpSocket *asyncUdpSocket; } asyncUdpSocket = [[AsyncUdpSocket alloc] initWithDelegate: self ]; |
2.2.2.绑定端口
?
1 2 3 4 | NSError *err = nil ; [asyncUdpSocket enableBroadcast: YES error:&err]; [asyncUdpSocket bindToPort:9527 error:&err]; |
2.2.3.实现代理方法
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | //已接收到消息 - ( 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
?
1 2 3 4 5 6 7 8 9 | NSString *str = @ "谁是服务器?我的IP是:192.168.80.103" ; NSData *data=http://www.mamicode.com/[str dataUsingEncoding: NSUTF8StringEncoding ]; [asyncUdpSocket sendData:data toHost:@"255.255.255.255 port:9527 withTimeout:-1 tag:0]; |
作者: 清澈Saup
出处: http://www.cnblogs.com/qingche/
本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。