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://www.pswp.cn/diannao/100259.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/100259.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/100259.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LazyLLM教程 | 第9讲:微调实践:让大模型和向量模型更懂你的领域

前面教程中,我们通过优化检索策略、召回重排略以及基于大模型的查询重写策略来提升了RAG系统的检索精度,但最终回复的结果还需要经过大模型的融合和处理,模型能力的强弱直接影响到最终的结果。这就好比一道好的菜不仅需要有高质量的食材&…

六、vue3后台项目系列——页面自适应设计+pinia,vuex的使用

前言:在页面加入自适应是提高用户体验的一种形式,甚至有时候是手机用户,我们就需要做一个自适应处理,其中肯定会涉及一些状态条件的判断,而这些关键的条件就是我们用来切换样式的关键,所以我们需要使用状态…

视频讲解|Python用ResNet残差神经网络在大脑出血CT图像描数据预测应用

全文链接:https://tecdat.cn/?p43843 原文出处:拓端抖音号拓端tecdat 分析师:Zikun Zhang 视频讲解Python用ResNet残差神经网络在大脑出血CT图像描数据预测在临床医疗影像诊断中,大脑出血的快速准确识别直接关系到患者的救治效率…

Mysql中有那些锁

按照锁的力度分:1.行级锁2.表级锁3.全局锁4.页级锁innodb不支持页锁全局锁全局锁指的是对整个数据库实例加锁,一般用于数据库的表级锁表锁 是对整张表进行加锁。表级锁还有以下几种:意向锁:意向锁是指,我们在事务请求表…

基于 CoT 思维链协调多 MCP 工具:依托亚马逊云科技服务打造全流程智能的 Amazon Redshift 运维体系

基于 CoT 思维链协调多 MCP 工具:依托亚马逊云科技服务打造全流程智能的 Amazon Redshift 运维体系 新用户可获得高达 200 美元的服务抵扣金 亚马逊云科技新用户可以免费使用亚马逊云科技免费套餐(Amazon Free Tier)。注册即可获得 100 美元的…

手机群控平台的智能管控技术深度解析

手机群控平台作为数字化运营的核心工具,正在重塑移动设备管理的技术边界。其核心价值在于通过集中化控制实现批量化操作,同时借助智能化算法提升管控效率。本文将深入探讨其技术架构与实现方案。平台架构与核心技术手机群控平台采用分布式架构设计&#…

Spring Boot 生命周期与核心扩展点全解析(含实操案例)

在Spring Boot开发中,理解应用的生命周期是实现优雅启动、资源管理与故障处理的关键。不同于传统Spring框架需要繁琐的XML配置,Spring Boot通过自动配置简化了开发流程,但其生命周期的底层逻辑仍延续并增强了Spring的核心机制。本文将从“生命周期阶段划分”“核心扩展点原理…

69-SQLite应用

1. SQLite操作 1.1了解数据库1.2 操作数据库步骤# -*- coding: utf-8 -*- """ Project : 01-python-learn File : 03_SQLite3添加数据.py IDE : PyCharm Author : 刘庆东 Date : 2025/9/15 14:05 """ # 1. 导入模块 import sqlite3 …

Nginx - 正向vs反向代理

参考: https://blog.csdn.net/william_n/article/details/127387009 AI问答​​ Nginx 正向代理 vs 反向代理详解​​ ​​1. 正向代理(Forward Proxy)​​ ​​定义​​ ​​客户端主动配置​​的代理服务器,代表客户端向外部服务器发送请…

装饰器模式在Spring中的案例

设计模式-装饰器模式 装饰器模式所解决的问题是,在不改变原来方法代码的情况下对方法进行修饰,从而丰富方法功能。 Spring架构中的装饰器模式 在Spring架构中,以线程池进行举例。 线程池 线程池是一个对线程集中管理的对象,集中管…

云原生与 AI 驱动下的数据工程新图景——解读 DZone 2025 数据工程趋势报告【附报告下载】

在 AI 技术从“实验性”走向“企业级落地”的关键阶段,数据工程作为底层支撑的重要性愈发凸显。近日,DZone 发布的《2025 数据工程趋势报告》(Scaling Intelligence with the Modern Data Stack)通过对全球 123 位 IT 专业人士的调…

9.5 机器翻译与数据集

语言模型是自然语言处理的关键,而机器翻译是语言模型最成功的基准测试,因为机器翻译正是将输入序列转换成输出序列的序列转换模型的核心问题。序列转码模型在各类现代人工智能应用中国呢发挥着至关重要的作用,因此我们将其作为本章剩余部分和…

Linux 内核镜像与启动组件全解析:从 vmlinux 到 extlinux.conf

🧠 Linux 内核镜像与启动组件全解析:从 vmlinux 到 extlinux.conf 在嵌入式 Linux 系统中,启动流程涉及多个关键文件和机制。不同的镜像格式和配置文件承担着不同的职责,从内核编译到 bootloader 加载,再到系统启动。本…

【系统分析师】2024年下半年真题:论文及解题思路

更多内容请见: 备考系统分析师-专栏介绍和目录 文章目录 试题一:论devops在企业信息系统开发中的应用 试题二:论系统业务流程分析方法及应用 试题三:论软件测试方法及应用 试题四:论信息系统运维管理 试题一:论devops在企业信息系统开发中的应用 1、概要叙述你参与管理和…

AI GEO 实战:借百度文小言优化,让企业名称成搜索热词

在当今数字化浪潮中,企业的线上曝光度和搜索可见性至关重要。百度作为国内占据主导地位的搜索引擎,其推出的大模型文小言蕴含着巨大的潜力。通过巧妙运用 AI GEO(生成式引擎优化)策略,企业完全有可能让自己的公司名称成…

文件操作知识点总结

目录 1.为什么使用文件 2.什么是文件? 2.1 程序文件 2.2 数据文件 2.3 文件名 3.二进制文件和文本文件 4.文件的打开和关闭 4.1 流和标准流 4.1.1 流 4.1.2 标准流 4.2 文件指针 4.3 文件的打开和关闭 4.3.1 fopen函数 4.3.2 fclose函数 5.文件的顺序…

oracle认证有哪几种?如何选择

Oracle(甲骨文)不仅是全球领先的数据库软件巨头,更是企业级数据管理的代名词,获得Oracle认证,证明可从事Oracle数据库服务器的数据操作和管理等工作。下面给大家详细其主要认证类型及其在职业发展中的含金量&#xff0…

AppTest邀请测试测试流程

相比AppGallery邀请测试,AppTest邀请测试具备以下全新能力:若您同时发布了多个测试版本,AppTest支持测试版本自动升级到最新的测试版本。您可以选择将当前最新在架版本的应用介绍截图展示给测试人员,视觉效果更好,提升…

硬件 - oring多电源切换

目录 一、ORing电路 1.1 ORING 电路 1.2 ORING 电路关键部分 二、多电源切换 2.1 主要思路 2.2 适用场景 一、ORing电路 1.1 ORING 电路 中文常称 “或环电路” 或 “并联冗余电路”是一种电源并联冗余拓扑结构 核心功能:将多路独立电源的输出 “并联整合”&a…

Qt多语言翻译实战指南:常见陷阱与动态切换解决方案

问题背景 在Qt项目国际化过程中,开发者经常会遇到各种翻译逻辑问题,特别是需要实现运行时语言动态切换功能时。一个典型场景是:程序默认英文显示,加载中文翻译文件后界面变为中文,但再次切换回英文时却失败。本文将深入…