• 局域网内通过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;

    }

  • 相关阅读:
    程序员面试金典-面试题 08.12. 八皇后
    程序员面试金典-面试题 08.11. 硬币
    程序员面试金典-面试题 08.10. 颜色填充
    程序员面试金典-面试题 08.09. 括号
    程序员面试金典-面试题 08.08. 有重复字符串的排列组合
    程序员面试金典-面试题 08.07. 无重复字符串的排列组合
    程序员面试金典-面试题 08.06. 汉诺塔问题
    python学习笔记-27 使用@property
    python学习笔记-25 实例属性和类属性
    python学习笔记-26 使用__slots__
  • 原文地址:https://www.cnblogs.com/wisejoker/p/3553184.html
Copyright © 2020-2023  润新知