码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 利用Socket UDP协议广播机制的实现

时间:2015-07-17 18:51:02      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:ios   ios开发   iphone   socket   udp   

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,利用TCPUDP 相互连接上就可以开始通讯了

    }  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 利用Socket UDP协议广播机制的实现

标签:ios   ios开发   iphone   socket   udp   

原文地址:http://blog.csdn.net/u013250412/article/details/46930335

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!