热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

局域网内通过UDP协议进行传输接受数据——AsyncUdpSocket

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

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

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

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

bubuko.com,布布扣 >(这两个文件在网上可以搜到)

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

 
  NSError * error =
Nil;

>    //使用IPv4Heiti SC Light";‘>初始化一个Socket

>    activeSocket
= [[
AsyncUdpSocket>alloc]
initIPv4];

>   
//设置委托为自身

>   
[
activeSocketsetDelegate>:self>];

>    //PORT_ACTIVEHeiti SC Light";‘>为发送端口

>   
[
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.发送数据

 

>    //theMessageHeiti SC Light";‘>为NSString,为需要发送的数据

>    NSData
* data = [theMessage
dataUsingEncoding:NSASCIIStringEncoding>] ;

  
 

    >BOOL result = NO;

>    //开始发送

 

>    //pcHostHeiti SC Light";‘>为接收方的ip地址,255.255.255.255Heiti SC Light";‘>为向全域广播

 

>    //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;

}


推荐阅读
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 本文介绍了如何使用 CMD 批处理脚本进行文件操作,包括将指定目录下的 PHP 文件重命名为 HTML 文件,并将这些文件复制到另一个目录。 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • VS2019 在创建 Windows 恢复点时出现卡顿问题及解决方法
    在使用 Visual Studio 2019 时,有时会在创建 Windows 恢复点时遇到卡顿问题。这可能是由于频繁的自动更新导致的,每次更新文件大小可能达到 1-2GB。尽管现代网络速度较快,但这些更新仍可能对系统性能产生影响。本文将探讨该问题的原因,并提供有效的解决方法,帮助用户提升开发效率。 ... [详细]
  • 自动验证时页面显示问题的解决方法
    在使用自动验证功能时,页面未能正确显示错误信息。通过使用 `dump($info->getError())` 可以帮助诊断和解决问题。 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • 本文详细介绍了DMA控制器如何通过映射表处理来自外设的请求,包括映射表的设计和实现方法。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 本项目通过Python编程实现了一个简单的汇率转换器v1.02。主要内容包括:1. Python的基本语法元素:(1)缩进:用于表示代码的层次结构,是Python中定义程序框架的唯一方式;(2)注释:提供开发者说明信息,不参与实际运行,通常每个代码块添加一个注释;(3)常量和变量:用于存储和操作数据,是程序执行过程中的重要组成部分。此外,项目还涉及了函数定义、用户输入处理和异常捕获等高级特性,以确保程序的健壮性和易用性。 ... [详细]
  • 本指南详细介绍了如何利用华为云对象存储服务构建视频点播(VoD)平台。通过结合开源技术如Ceph、WordPress、PHP和Nginx,用户可以高效地实现数据存储、内容管理和网站搭建。主要内容涵盖华为云对象存储系统的配置步骤、性能优化及安全设置,为开发者提供全面的技术支持。 ... [详细]
  • 为了提升单位内部沟通效率,我们开发了一套飞秋软件与OA系统的消息接口服务系统。该系统能够将OA系统中的审批、通知等信息自动同步至飞秋平台,确保员工在使用飞秋进行日常沟通的同时,也能及时获取OA系统的各类重要信息,从而实现无缝对接,提高工作效率。 ... [详细]
author-avatar
谷智精源
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有