iOS 利用Socket UDP协议广播机制的实现
2015-07-17 17:23
756 查看
1.前言
什么是UDP协议广播机制?
举一个例, 例如在一群人群中,一个人要找张三,于是你向人群里大喊一声(广播):“谁是张三”
如果它是张三,它就会回应你,在网络中也是一样的。
UDP广播机制的应用场景:
若干个客户端,在局域网内(不知道IP的情况下)
需要在很多设备里需找特有的设备,比如服务器,抑或是某个打印机,传真机等。
假设我现在准备将服务器装在永不断电的iPad上。
若干个客户端iPhone 一激活,就要来向所有设备广播,谁是服务器,是服务器的话,请把IP地址告诉我。然后我就去连接,然后进入长连接,后台接受消息。
2.UDP广播机制的实现
注:iPad:服务器端 iPhone:客户端
2.1.服务器端(iPad)的实现
//初始化udp
AsyncUdpSocket *asyncUdpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
//绑定端口
NSError *err =
nil;
[asyncUdpSocket enableBroadcast:YES error:&err];
[asyncUdpSocket bindToPort:9527 error:&err];
//启动接收线程
[asyncUdpSocket receiveWithTimeout:-1 tag:0];
2.1.1.实现代理方法
//已接收到消息
- (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)的实现
注:实现步骤与服务器端相似
//初始化udp
AsyncUdpSocket *asyncUdpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
//绑定端口
NSError *err =
nil;
[asyncUdpSocket enableBroadcast:YES error:&err];
[asyncUdpSocket bindToPort:9527 error:&err];
2.2.1.实现代理方法
//已接收到消息
- (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.2.广播寻找
注:广播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];
什么是UDP协议广播机制?
举一个例, 例如在一群人群中,一个人要找张三,于是你向人群里大喊一声(广播):“谁是张三”
如果它是张三,它就会回应你,在网络中也是一样的。
UDP广播机制的应用场景:
若干个客户端,在局域网内(不知道IP的情况下)
需要在很多设备里需找特有的设备,比如服务器,抑或是某个打印机,传真机等。
假设我现在准备将服务器装在永不断电的iPad上。
若干个客户端iPhone 一激活,就要来向所有设备广播,谁是服务器,是服务器的话,请把IP地址告诉我。然后我就去连接,然后进入长连接,后台接受消息。
2.UDP广播机制的实现
注:iPad:服务器端 iPhone:客户端
2.1.服务器端(iPad)的实现
//初始化udp
AsyncUdpSocket *asyncUdpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
//绑定端口
NSError *err =
nil;
[asyncUdpSocket enableBroadcast:YES error:&err];
[asyncUdpSocket bindToPort:9527 error:&err];
//启动接收线程
[asyncUdpSocket receiveWithTimeout:-1 tag:0];
2.1.1.实现代理方法
//已接收到消息
- (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)的实现
注:实现步骤与服务器端相似
//初始化udp
AsyncUdpSocket *asyncUdpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
//绑定端口
NSError *err =
nil;
[asyncUdpSocket enableBroadcast:YES error:&err];
[asyncUdpSocket bindToPort:9527 error:&err];
2.2.1.实现代理方法
//已接收到消息
- (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.2.广播寻找
注:广播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];
相关文章推荐
- 提高iOS开发效率的方法和工具
- ios数组基本用法和排序
- IOS 项目中必须避免的几种循环引用的问题
- 分享一些iOS开发的教程
- nagios监控iptables状态(二)
- IOS中的深拷贝与浅拷贝
- 4、iOS传值的方法-Notifaction反向传值
- IOS7 textkit 的相关
- iOS事件拦截及应用
- 3、iOS传值的方法-Notifaction正向传值
- iOS常用加密方法(aes、md5、base64)
- 如何在tabBar上显示 提示小红点标记(badge)
- IOS-归档的使用
- ios 如何让所有界面的状态栏的字体颜色都设置为白色
- iOS开发 - CoreData框架 数据持久化
- 使用Xcode 7 beta免费真机调试iOS应用程序
- 2、iOS传值的方法-delegate反向传值
- 在iOS中求数组元素中最大数与最小数
- iOS开发大神的博客
- iOS 金额字段加千位分隔符的方法以及银行卡卡号4位一空格的方法