zoukankan      html  css  js  c++  java
  • 局域网内通过UDP协议进行传输接受数据——AsyncUdpSocket

    在相同的局域网内,可以通过Udp协议进行数据的传输和接收,Udp协议与Http协议不同,Udp更加方便快捷,省去了很多步骤,但是也有很多传输问题,在局域网内小范围传输数据时Udp还是非常能够胜任的。

    在iOS开发环境下,就要通过AsyncUdpSocket这个框架来进行Udp协议下的数据传输。

    1.要添加AsyncUdpSocket框架文件到项目,并在需要使用Udp协议的类中加入其头文件

    NewImage(这两个文件在网上可以搜到)

    2.对Socket进行实例化,并初始化

        NSError * error = Nil;

        //使用IPv4初始化一个Socket

        activeSocket = [[AsyncUdpSocketalloc] initIPv4];

        //设置委托为自身

        [activeSocketsetDelegate:self];

        //PORT_ACTIVE为发送端口

        [activeSocketbindToPort:PORT_ACTIVEerror:& error];

        //允许广播信息

        [activeSocketenableBroadcast:YESerror:& error];

        //允许接受信息

        [activeSocketreceiveWithTimeout:-1tag:0];

    3.在类中加入AsyncUdpSocket的委托

    #pragma mark - AsyncUdpSocket Delegate

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

    {

        returnYES;

    }

     

    - (void)onUdpSocket:(AsyncUdpSocket *)sock didNotReceiveDataWithTag:(long)tag dueToError:(NSError *)error

    {   

    }

     

    - (void)onUdpSocket:(AsyncUdpSocket *)sock didSendDataWithTag:(long)tag

    {

    }

     

    - (void)onUdpSocket:(AsyncUdpSocket *)sock didNotSendDataWithTag:(long)tag dueToError:(NSError *)error

    {   

    }

     

    - (void)onUdpSocketDidClose:(AsyncUdpSocket *)sock

    {   

    }

    4.发送数据

     

        //theMessageNSString,为需要发送的数据

        NSData * data = [theMessage dataUsingEncoding:NSASCIIStringEncoding] ;

        

        BOOL result = NO;

        //开始发送

     

        //pcHost为接收方的ip地址,255.255.255.255为向全域广播

     

        //thePort为发送端口

        result = [theSocket sendData:data

                           toHost:pcHost

                             port:thePort

                      withTimeout:1000

                              tag:0];

        

        if (!result) {

            NSLog(@"send failed");

        }

        else{

            NSLog(@"send succeed");

        }

    5.接收数据

    接收数据的实现在委托中

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

    {

    //重新设置接收时间

        [sock receiveWithTimeout:-1tag:0];

    //info就为接收到的数据

        NSString *info=[[NSStringalloc] initWithData:data encoding: NSUTF8StringEncoding];

        returnYES;

    }

  • 相关阅读:
    在Windows中,U盘或者移动硬盘关不掉时,怎么知道是被哪个程序占用了呢?
    选择的文件中包含不支持的格式
    FTO Obesity Variant Circuitry and Adipocyte Browning in Humans
    SNPsnap | 筛选最佳匹配的SNP | 富集分析 | CP loci
    PhastCons | 序列保守性打分
    hg19基因组 | 功能区域 | 位置提取
    投稿SCI杂志 | 如何撰写cover letter | 如何绘制illustrated abstract
    variant的过滤 | filtering and prioritizing genetic variants
    会议录音的处理 | 提高音量 + 降噪 + 自动添加字幕
    小型数据工作站 | 管理和维护 | Jupyter | Rstudio server | Mac & Win10
  • 原文地址:https://www.cnblogs.com/wisejoker/p/3553184.html
Copyright © 2011-2022 走看看