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

}

原文地址:https://www.cnblogs.com/wisejoker/p/3553184.html