zoukankan      html  css  js  c++  java
  • iOS 利用Socket UDP协议广播机制的实现

    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: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是找server的){

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

    注:实现步骤与server端相似

    //初始化udp

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

    //绑定port

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

    NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding];

    [asyncUdpSocket sendData:data toHost:@"255.255.255.255" port:9527 withTimeout:-1 tag:0];




  • 相关阅读:
    Linux 配置gitee
    Linux C errno出错处理
    Linux C进程时间:墙上时钟时间,用户CPU时间,系统CPU时钟时间
    编译错误: 对‘aio_read’未定义的引用
    Linux 异步IO(AIO)
    Linux getaddrinfo获得本机ip地址为何127.0.1.1?
    Linux 文件截断的几种方式
    如何创建守护进程?
    守护进程, 协同进程, 僵尸进程, 孤儿进程概念理解
    对线程安全, 可重入函数, 异步安全的理解
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5348147.html
Copyright © 2011-2022 走看看