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  

@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/
本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。

 
 
 

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. Android为TV端助力 UDP协议

    废话不多说.直接上代码! 一. 接收端 1.创建UDP连接 public void init() { try { //开关的作用 isRunning = true; DatagramSocket mU ...

  4. Android为TV端助力:UDP协议(接收组播和单播)

    private static String MulticastHost="224.9.9.98";private static int POST=19999;private sta ...

  5. socket模块实现基于UDP聊天模拟程序;socketserver模块实现服务端 socket客户端代码示例

    socket模块 serSocket.setblocking(False) 设置为非阻塞: #coding=utf-8 from socket import * import time # 用来存储所 ...

  6. tcp和udp协议的聊天 和udp协议的时间同步机制-----编码

    tcp协议聊天 服务端:: 客户端 udp协议的聊天 ############ udp协议 ########### 服务器 import socket sk = socket.socket(type ...

  7. udp协议基础(转自疯狂java讲义)

    第17章  网络编程 17.4  基于UDP协议的网络编程 UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发 ...

  8. java 25 - 4 网络编程之 UDP协议传输思路

    UDP传输 两个类:DatagramSocket与DatagramPacket(具体看API) A:建立发送端,接收端. B:建立数据包. C:调用Socket的发送接收方法. D:关闭Socket. ...

  9. day30 UDP协议

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

随机推荐

  1. 「PHP」策略模式

    引言   所属:行为型模式,常用设计模式之一     学习资料: <大话设计模式>程杰   模式概述   分享一篇关于策略模式讲的很好的文章,大家可以参考一下:https://www.cn ...

  2. idea配置SpringBoot热部署之自动Build

    一.pom.xml文件导入所需依赖文件 SpringBoot热部署插件 <dependency> <groupId>org.springframework.boot</g ...

  3. 第5章 MapReduce操作

    目录 5.1 案例分析:单词计数 1.设计思路 2.程序源代码 3.程序解读 4.程序运行 5.2 案例分析:数据去重 1.设计思路 2.编写程序 3.程序解读 4.程序运行 5.3 案例分析:求平均 ...

  4. 基于原生JS封装数组原型上的sort方法

    基于原生JS封装数组原型上的sort方法 最近学习了数组的原型上内置方法的封装,加强了用原生JS封装方法的能力,也进一步理解数组方法封装的过程,实现的功能.虽然没有深入底层,了解源码.以下解法都是基于 ...

  5. 理解golang中的channel

    channel是goroutine之间的通信机制.可以类比线程间的通信,线程间的通信有多种方式,比如线程上下文.共享内存.IPC通信.socket实现不同机器间的通信. channel用起来很简单,绑 ...

  6. Go语言入门(一)特性、安装、环境搭建、第一个程序等

    Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮 ...

  7. 【8086汇编-Day6】关于loop的实验

    实验内容 因为是要复制代码,所以常规来做是取代码段地址来用,所以把cs值mov给ax,但是这只是临时的,ax之后还有别的用途,那就把指令当作数据来存(把ax值 mov给ds,表示这一段地址用作代码段, ...

  8. Java设计模式(16)——行为模式之模板方法模式(Template)

    一.概念 概念 UML简图 角色 使用场景 其实我们常用得抽象类就是这个模式得运用,所以基本上属于比较好理解的一种模式. 二.实践 根据上述角色,给出相应代码 抽象模板 /** * 抽象模板 * * ...

  9. Java设计模式(8)——结构型模式之组合模式(Composite)

    一.概述 定义 将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. 简图 角色——对应上图中顶点为Component,左边为Leaf,右边为C ...

  10. 构建工具——maven的补充

    1.安装jar到本地仓库 有时候有部分jar由于在maven的中央仓库,只能引用本地的,可以将jar安装到本地仓库进行操作(请先确保mvn命令可以正常运行) mvn install:install-f ...