当前位置: 首页 > news >正文

【学习K230-例程21】GT6700-UDP-Client

B站视频


UDP 简介

  UDP 是 User Datagram Protocol 的简称,中文名是用户数据报协议,是 OSI(Open SystemInterconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768 是 UDP 的正式规范。UDP 在 IP 报文的协议号是17。
  UDP 协议与 TCP 协议一样用于处理数据包,在 OSI 模型中,两者都位于传输层,处于IP 协议的上一层。UDP 有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP 用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用 UDP 协议。UDP 协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使在今天 UDP 仍然不失为一项非常实用和可行的网络传输层协议。
  许多应用只支持 UDP,如:多媒体数据流,不产生任何额外的数据,即使知道有破坏的包也不进行重发。当强调传输性能而不是传输的完整性时,如:音频和多媒体应用,UDP是最好的选择。在数据传输时间很短,以至于此前的连接过程成为整个流量主体的情况下,UDP 也是一个好的选择。
  UDP 是 OSI 参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是 IP 协议与上层协议的接口。UDP 协议适用端口分别运行在同一台设备上的多个应用程序。
  UDP 提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP 传输的可靠性由应用层负责。常用的 UDP 端口号有:53(DNS)、69(TFTP)、161(SNMP),使用 UDP 协议包括:TFTP、SNMP、NFS、DNS、BOOTP。
  UDP 报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差。但是正因为 UDP协议的控制选项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如 DNS、TFTP、SNMP 等。

代码展示

from machine import Pin                 #导入Pin模块
import time, os, socket, network        #导入time, os, socket, network模块def network_connect(connect=True):LAN_LED=Pin(53, Pin.OUT)            #初始化联网指示灯if connect:LAN_LED.value(1)                #LED灯点亮else:for i in range(3):LAN_LED.value(1)time.sleep_ms(300)LAN_LED.value(0)time.sleep_ms(300)
# 执行以太网连接函数
def network_use_lan(is_lan=True):if is_lan:lan = network.LAN()if lan.active():print('network information:', lan.ifconfig())# 串口打印信息lan.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))# 设定IP和DNSlan.ifconfig("dhcp")    #设置DHCP模式print(lan.config("mac"))#查看网口mac地址print(lan.ifconfig())   #查看网口 ip,掩码,网关,dns配置network_connect(True)   #连接成功,点亮LEDip = lan.ifconfig()[0]else:network_connect(False)      #连接失败,LED闪烁三次ip = '0.0.0.0'raise RuntimeError("LAN 未激活")else:print("WIFI 请等待更新")ip = '0.0.0.0'network_connect(False)          #连接失败,LED闪烁三次return ipdef main():ip=network_use_lan(True)                                # 获取 IP 地址if not ip=='0.0.0.0':network_use_lan(True)                               # 配置网络接口ai = socket.getaddrinfo('192.168.0.1', 8080)        # 获取服务器地址和端口号print("Address infos:", ai)addr = ai[0][-1]print("Connect address:", addr)s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 创建 UDP 套接字for i in range(10):message = "GINGKO K230 UDP client send test {0} \r\n".format(i+1)print("Sending:", message)bytes_sent = s.sendto(message.encode(), addr)   # 发送字符串print("Bytes sent:", bytes_sent)time.sleep(0.2)s.close()# 关闭套接字print("Client ended.")main()

代码解读

导入必要库

 import socket   # 库负责创建网络通信的套接字  import network  # 库用于配置网络接口,比如启用 LAN 或 WLAN。  import time     # 库提供延时操作,通常用于控制数据发送频率或超时处理。  

配置网络接口
  这个函数根据是否选择无线网络(WLAN)或有线网络(LAN)来配置网络接口,具体步骤如下:
    LAN 模式:激活 LAN 接口,并使用 DHCP 模式获取 IP 地址。

# 执行以太网连接函数  
def network_use_lan(is_lan=True):  if is_lan:  lan = network.LAN()  if lan.active():  # 串口打印信息  print('network information:', lan.ifconfig())  lan.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))# 设定IP和DNS  lan.ifconfig("dhcp")# 设置DHCP模式  print(lan.config("mac"))# 查看网口mac地址  print(lan.ifconfig())# 查看网口 ip,掩码,网关,dns配置  network_connect(True)# 连接成功,点亮LED  ip = lan.ifconfig()[0]  else:  network_connect(False)# 连接失败,LED闪烁三次  ip = '0.0.0.0'  raise RuntimeError("LAN 未激活")  else:  print("WIFI 请等待更新")  ip = '0.0.0.0'  network_connect(False)# 连接失败,LED闪烁三次  return ip  

创建 UDP 套接字
  这里通过 socket.getaddrinfo 获取服务器的 IP 和端口信息,并提取出地址和端口号,然后创建 UDP 套接字。

 # 获取服务器的 IP 和端口号    ai = socket.getaddrinfo('192.168.0.1', 8080)  print("Address infos:", ai)    addr = ai[0][-1]  # 提取 IP 和端口号  print("Connecting to address:", addr)  # 创建 UDP 套接字  s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  

发送数据
  在循环中,程序生成测试消息,并将其通过 sendto 函数发送到指定的服务器地址。消息在发送之前需要转换成字节串。发送成功后,打印已发送的字节数,并设置一个小的延时。

 # 发送测试消息  for i in range(10):  message = "GINGKO K230 UDP client send test {0} \r\n".format(i+1)  print("Sending:", message)  # 发送字符串  bytes_sent = s.sendto(message.encode(), addr)  print("Bytes sent:", bytes_sent)  time.sleep(0.2)  

关闭套接字

 # 关闭套接字  s.close()  print("Client ended.")# 在数据发送完成后,关闭套接字以释放资源。

效果展示

配置好后,我们通过Win+R输入cmd。在命令符里输入ipconfig,查看我们PC与K230连接的网线IP。
在这里插入图片描述
这个IP就是我们PC的IP。如果PC的IP或者端口号如果更改,请在代码中也对应更改。
在这里插入图片描述
我们将K230的IP配置到与PC同一子网下。
在这里插入图片描述
最后我们将PC端的防火墙关闭,开启防火墙可能会传输信息失败。
在这里插入图片描述
准备好上述工作后,我们就可以打开我们的网络助手,选择UDP,选择本地主机IP和端口号,点击打开。随后我们运行K230代码,连接成功后,将会通过网络发送十条数据。
在这里插入图片描述

【学习k230 - 例程21】网络例程UDP


文章转载自:

http://bfUW7LW9.snkry.cn
http://QK9LaIwh.snkry.cn
http://U1c4AKdT.snkry.cn
http://n4CsVhVh.snkry.cn
http://nHqy8t6e.snkry.cn
http://XaoWYQL9.snkry.cn
http://vXrDZ0G2.snkry.cn
http://lxdqUdco.snkry.cn
http://gfHFXXuK.snkry.cn
http://4uyLWAg3.snkry.cn
http://ItUXHFBK.snkry.cn
http://Qnf82Lob.snkry.cn
http://Fazgk50y.snkry.cn
http://cGZtnCcF.snkry.cn
http://kit4hvEA.snkry.cn
http://G3Op0L60.snkry.cn
http://xNJCiedW.snkry.cn
http://05z6VdYe.snkry.cn
http://eh33UB7I.snkry.cn
http://oVDCQflf.snkry.cn
http://U5PUcU6L.snkry.cn
http://ImMkniB9.snkry.cn
http://QJGTZRnT.snkry.cn
http://nqGWss4v.snkry.cn
http://8cn2c410.snkry.cn
http://570Ynweh.snkry.cn
http://vcKVDkNs.snkry.cn
http://FIJslrSL.snkry.cn
http://PN9srzMU.snkry.cn
http://tWDua4VD.snkry.cn
http://www.dtcms.com/a/379945.html

相关文章:

  • 考研408计算机网络近年第34题真题解析(2021-2024.34)
  • 安装vcenter6.7 第二阶段安装很慢 或卡在50%
  • 《赛事报名系统小程序》
  • 倍福PLC常见问题
  • 课前准备--解析空间转录组肿瘤微环境SNV(visium、stereo)
  • Linux下C语言实现HTTP+SQLite3电子元器件查询系统
  • 第四节 JavaScript——深入变量、作用域与内存管理
  • 淘客返利app后端系统架构设计:从数据一致性到高可用方案
  • 自动清除ROS日志方法汇总
  • GitHub 上整合深度学习 + 遥感数据集(或工具库/benchmark)的项目
  • 学习日记-JS+DOM-day54-9.12
  • 数据分析毕业论文题目推荐:精选选题清单
  • Apache Flink 从流处理基础到恰好一次语义
  • 第2篇:数据持久化实战
  • redis sentinel 与 clauster 的区别
  • Vue: 侦听器(Watch)
  • HTML 设计与使用入门
  • 【大数据专栏】流式处理框架-Apache Fink
  • 老项目CSS样式失效?调整css插件版本解决
  • Flink 实时流处理实战:电商实时大屏分析
  • ARM(7)IMX6ULL 按键控制(轮询 + 中断)优化工程
  • 基于STM32设计的青少年学习监控系统(华为云IOT)_282
  • Django全栈班v1.04 Python基础语法 20250912 上午
  • Vue3+ts使用oidc-client-ts
  • V少JS基础班之第八弹
  • webrtc弱网-AlrDetector类源码分析与算法原理
  • 鸿蒙Next Web渲染与布局详解:深入理解自适应布局与渲染模式
  • 猿辅导前端面试题及参考答案
  • 鸿蒙NEXT Web组件与JavaScript交互:打通原生与前端的桥梁
  • C#高并发与并行理解处理