1.前言

什么是UDP协议广播机制?

举一个例。 比如在一群人群中,一个人要找张三,于是你向人群里大喊一声(广播):“谁是张三”

假设它是张三,它就会回应你。在网络中也是一样的。

UDP广播机制的应用场景:

若干个client。在局域网内(不知道IP的情况下)
须要在非常多设备里需找特有的设备,比方server,抑或是某个打印机,传真机等。

如果我如今准备将server装在永不断电的iPad上。

若干个clientiPhone 一激活。就要来向全部设备广播,谁是server。是server的话,请把IP地址告诉我。

然后我就去连接。然后进入长连接,后台接受消息。

2.UDP广播机制的实现

注:iPad:server端  iPhone:client

2.1.server端(iPad)的实现

//初始化udp

AsyncUdpSocket *asyncUdpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];

//绑定port

NSError *err =
nil;

[asyncUdpSocket enableBroadcast:YES error:&err];

[asyncUdpSocket bindToPort: error:&err];

//启动接收线程

[asyncUdpSocket receiveWithTimeout:- tag:];

2.1.1.实现代理方法 

//已接收到消息

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

if(data是找server的){

      //依据client给的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.client(iPhone)的实现

注:实现步骤与server端相似

//初始化udp

AsyncUdpSocket *asyncUdpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];

//绑定port

NSError *err =
nil;

[asyncUdpSocket enableBroadcast:YES error:&err];

[asyncUdpSocket bindToPort: 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 =
@"谁是server?我的IP是:192.168.80.103";

NSData *data=[str
dataUsingEncoding:NSUTF8StringEncoding];

[asyncUdpSocket sendData:data toHost: withTimeout:-
tag:];

iOS 利用Socket UDP协议广播机制的实现的更多相关文章

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

    1.前言    什么是UDP协议广播机制?      举一个例, 例如在一群人群中,一个人要找张三,于是你向人群里大喊一声(广播):“谁是张三”   如果它是张三,它就会回应你,在网络中也是一样的. ...

  2. Unity3d之Socket UDP协议

    原文地址:http://blog.csdn.net/dingkun520wy/article/details/49201245 (一)Socket(套接字)UDP协议的特点 1.是基于无连接的协议,没 ...

  3. 聊聊iOS中TCP / UDP 协议

    TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于 传输层协议. UDP(User Datagram protoco ...

  4. day30 UDP协议

    本周安排 周二 socket编程 周三 粘包处理 周四 选课系统 并发编程 周五多道技术 多进程 周六 IPC 互斥锁 常用模块 os* 操作系统 多数是文件操作 os.path 处理文件路径 shu ...

  5. 基于udp协议的套接字及udp协议粘包问题

    udp协议的套接字 udp协议传输  服务端和客户端没有建立连接一说. import socket # 总结一下基础工作流程:服务端生成套接字并绑定ip_port,进入数据传输循环,服务端接受客户端发 ...

  6. java 网络编程基础 UDP协议的Socket:DatagramSocket;广播Socket:MulticastSocket

    什么是UDP协议: UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket 但这两个 Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象.Java 提供了 ...

  7. iOS的TCP/IP协议族剖析&&Socket

    原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有S ...

  8. 深入浅出--iOS的TCP/IP协议族剖析&&Socket

    深入浅出--iOS的TCP/IP协议族剖析&&Socket   简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有Socket.(--该文很干,酝酿了许久! ...

  9. java基础知识回顾之java Socket学习(一)--UDP协议编程

    UDP传输:面向无连接的协议,不可靠,只是把应用程序传给IP层的数据报包发送出去,不保证发送出去的数据报包能到达目的地.不用再客户端和服务器端建立连接,没有超时重发等机制,传输速度快是它的优点.就像寄 ...

随机推荐

  1. C# 在SQLite数据库中存储图像 z

    C# 在SQLite数据库中存储图像 更多 0 C# SQLite   建表语句 CREATE TABLE [ImageStore]([ImageStore_Id] INTEGER NOT NULL ...

  2. jdk .tar.gz 包安装 inAction

    方法参考于http://blog.sina.com.cn/s/blog_81631744010137iy.html, 多谢博主分享,此处仅作为个人学习笔记. 首先将*.tar.gz解压 tar -xz ...

  3. bzoj4038: 医疗援助

    Description 一只带着先进设备和药物的医疗团队来到了埃博拉病毒疫区的某个非洲国家.这个国家有n个村庄,均坐落在该国唯一的一条公路旁,n个村庄依次标号为1,2,…n.第i个村庄有a_i个埃博拉 ...

  4. 转:我们是否应该把后端构建为API

    原文来自于:http://www.infoq.com/cn/news/2015/07/api-or-not 不久前,在StackExchange网站上,一位名为SLC的用户提起他正在设计一个ASP.N ...

  5. python的方法总结:

    1. Python的字典的items(), keys(), values()都返回一个list >>> dict = { 1 : 2, 'a' : 'b', 'hello' : 'w ...

  6. linux内核--进程地址空间(三)

    引言:上篇博文中,我们简单的介绍了Linux虚拟存储器的概念及组成情况,下面来分析分析进程的创建和终结及跟进程地址空间的联系. 这里首先介绍一个比较重要的概念:存储器映射 在Linux系统中,通过将一 ...

  7. 制作LOGO的35种方法

    A logo design is really a graphical element (ideogram, symbol, emblem, icon, sign) that, along with ...

  8. WIN7下制作的ubunbu U盘安装无法使用

    想在电脑上装个ubuntu 12.04来个双系统.就在win7下用U盘制作了个安装程序.但是U盘启动安装后一直无法开始安装.网上找了大半天才有个结论解决了. 步骤如下: 去ubuntu官网下载安装的i ...

  9. statspack系列6

    原文:http://jonathanlewis.wordpress.com/2006/12/27/analysing-statspack-6/ 作者:Jonathan Lewis 下面是一段时间以前网 ...

  10. .net 与 javascript脚本的几种交互方法

    1.asp.net呼叫js Response.Write("<script language=javascript>"); Response.Write("a ...