首页 > 其他分享 >10 - UDP实验

10 - UDP实验

时间:2024-09-18 11:53:33浏览次数:11  
标签:10 UDP socket 如下 实验 参数 连接 network

在本章节中,我们将采用 network 与 socket 这两个第三方库来构建UDP网络连接的功能。具体而言,network 库将被应用于WiFi连接的建立,而 socket 库则基于 lwIP 协议栈来实现网络协议的连接。在实验环节,我们将利用 ESP32 开发板与远程网络进行连接,并在此基础上进一步实施 UDP 连接的实现。本次实验的核心目标,在于构建一个基础的 UDP 连接机制,使其能够通过网络调试助手发送数据,并准确无误地将接收到的数据回传至发送端。

本节课目标:

在本次实验中,我们将ESP32开发板与WiFi网络连接,并配置实现UDP连接。核心任务是构建稳固的UDP连接机制,确保通过网络调试助手发送数据,并能准确回传接收数据,验证UDP连接的可靠性和有效性。

本节课内容:

  1. network 与 socket 库的简介
  2. network库的构造与方法
  3. socket 库的构造与方法
  4. 硬件设计
  5. 软件设计
  6. 下载验证

一、network 与 socket 库的简介

MicroPython 的 network 库与 socket 库皆为实现网络连接的重要工具,它们各自拥有独特的功能性并共享某些共通特点。

作为 MicroPython 的一个关键第三方库,network 库专门负责处理 WiFi 和网络连接的各项任务。通过此库,用户能够成功接入无线网络,查询当前网络状态,以及实现数据的收发等功能。在 MicroPython 的架构下,network 库扮演着促进设备间网络连接与通信的核心角色。

至于 network 库与 socket 库之间的主要差异,则体现在它们的应用场景与功能侧重上。具体而言,network 库侧重于设备的 WiFi 和基础网络连接功能的实现,而 socket 库则聚焦于高级网络协议的连接建立与数据传输过程。因此,在实际进行网络连接功能的设计与实施时,需根据具体需求及所依赖的硬件平台,谨慎选择并合理运用相应的库资源。

下面是MicroPython库的network 与 socket 库的链接。

network — 网络配置 — MicroPython latest documentation

socket – 套接字模块 — MicroPython latest documentation

类 WLAN – 控制内置 WiFi 接口 — MicroPython 最新文档

二、network.WLAN类的构造与方法

1. network.WLAN类的构造

构造对象方法如下:

class network.WLAN(interface_id)

使用示例:wlan = network.WLAN(network.STA_IF)

参数描述如下:

参数

描述

interface_id

支持接口

  • network.STA_IF:作为客户端,连接其他的服务器
  • network.AP_IF:作为服务器,其他WiFi客户端连接

返回值:WLAN网络接口对象

2. network.WLAN类的方法

(1)激活或停用网络接口

其方法原型如下:

WLAN.active(is_active[ ])

参数描述如下:

参数

描述

is_active

  • True:激活
  • False:作为服务器,其他WiFi客户端连接

返回值:无

(2)连接网络

其方法原型如下:

WLAN.connect(ssid=None, password=None)

参数描述如下:

参数

描述

ssid

WiFi账号

password

WiFi密码

返回值:Ture:连接成功;Fail:连接失败。

(3)关闭网络

其方法原型如下:

WLAN.disconnet()

返回值:无

(4)获取或者设置网络参数

其方法原型如下:

WLAN.ifconfig((ip, subnet, gateway, dns)[])

参数描述如下:

参数

描述

ip

IP地址

subnet

子网掩码

gateway

网关

dns

DNS服务器

返回值:若此函数为无参数传入,则返回连接网络的信息,反次,为设置网络参数。

以上是 network.WLAN 类常用的方法,还有其他方法可参考 MicroPython 的在线文档。

三、socket 库的构造与方法

1. socket类的构造

构造对象方法如下:

class socket.socket(af=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP, /)

使用示例:socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

参数描述如下:

参数

描述

af

地址族

  • socket_AF_INET:IPV4
  • socket_AF_INET6:IPV6

type

socket类型

  • socket.SOCK_STREAM:TCP类型
  • socket.SOCK_DGRAM:UDP类型

proto

网络协议

  • socket.IPPROTO_TCP:TCP协议
  • socket.IPPROTO_UDP:UDP协议

返回值:socket对象

2. socket类的方法

(1)关闭socket接口

其方法原型如下:

socket.close()

返回值:无

(2)socket绑定到地址

其方法原型如下:

socket.bind(address)

参数描述如下:

参数

描述

address

IP地址(字符串形式输入,如‘192.168.1.100’)

返回值:无

(3)监听连接

用作于 TCPServer 连接。

其方法原型如下:

socket.listen(backlog[])

参数描述如下:

参数

描述

backlog

监听连接数量

返回值:无

(4)接受连接

用作于 TCPServer 连接。注:在此之前,需监听连接

其方法原型如下:

socket.accept()

返回值:conn:新的套接字对象,用来收发消息;address:连接到服务器的客户端地址。

(5)连接远程IP地址

其方法原型如下:

socket.connect(address)

参数描述如下:

参数

描述

address

IP地址(字符串形式输入,如‘192.168.1.100’)

返回值:无

(6)发送数据,返回发送的字节数

其方法原型如下:

socket.send(bytes)

参数描述如下:

参数

描述

bytes

需发送的字节数据

返回值:发送的数据字节数。

(7)接收数据,返回值是一个字节对象

其方法原型如下:

socket.recv(bufsize)

参数描述如下:

参数

描述

bufsize

接收数据的存储区

返回值:接收数据字节对象。

(8)接收数据,返回值是一个字节对象

其方法原型如下:

socket.recvfrom(bufsize)

参数描述如下:

参数

描述

bufsize

接收数据的存储区

返回值:bytes:接收数据字节对象;addressa:套接字发送的地址数据。

(9)UDP发送数据,一般用于UDP连接

其方法原型如下:

socket.sendto(bytes, address)

参数描述如下:

参数

描述

bytes

发送的数据

address

发送至哪个远程IP地址

返回值:发送的数据字节数。

以上方法列出了本书中常用的套接字方法,对于剩余的套接字方法,请参考MicroPython最新的在线文档。

四、硬件设计

例程功能

在本次实验中,我们将ESP32开发板与WiFi网络连接,并配置实现UDP连接。核心任务是构建稳固的UDP连接机制,确保通过网络调试助手发送数据,并能准确回传接收数据,验证UDP连接的可靠性和有效性。

硬件资源

  • WIFI :ESP32内部自带WIFI模块

四、软件设计

程序流程图

程序

import network
import socket


def do_connect():
    """
    WIFI 连接函数
    """
    wlan = network.WLAN(network.STA_IF)  # 构建 wlan 对象
    wlan.active(True)  # 开启WIFI

    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('OrayBox-zsf', '123456789')          # 连接到WIFI路由器上
        while not wlan.isconnected():
            pass

    print('network config:', wlan.ifconfig())                           # 打印网络参数


# 1、WIFI 网络连接
do_connect()

# 2、创建 UDP 套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 3、UDP【查看自己测试电脑在同一 WIFI 下的地址,本测试电脑 IP 为'10.168.1.164'】
# 10.168.1.164

# 4、发送实验信息,通过UDP协议,与电脑的网络助手通信, 网络助手UDP配置参数为:IP:'10.168.1.164'  端口:8080
udp_socket.sendto('**************** UDP CONNECT TEST******************\r\n'.encode("utf-8"), ('10.168.1.164', 8080))


# 5、循环发送接收到的服务器数据
while True:
    # UDP 接收到的数据,及服务器 IP 和 端口号
    data, addr = udp_socket.recvfrom(4096)
    print(data, addr)
    udp_socket.sendto(data, (addr[0], addr[1]))

五、下载验证

将ESP32开发板与电脑通过WIFI路由器,连接在同一WiFi网络中,配置电脑上的网络调试助手UDP参数,如下图所示,并打开网络。

注意:ESP32程序中UDP发送目标IP和端口信息,按网络调试助手输入,如下图所示。

运行ESP32程序,网络调试助手会接收到ESP32的网络信息【10.168.1.139:50367】,设备网络调试助手远程主机地址信息,如下图所示。

与ESP32通过UDP协议相互通信。【UDP 通信有丢包的现象】

标签:10,UDP,socket,如下,实验,参数,连接,network
From: https://blog.csdn.net/johnny235241/article/details/142320361

相关文章

  • 20240918_114105 mysql 认识索引
    关于索引MySQL的索引是数据库管理系统中用于提高数据检索效率的一种数据结构。MySQL支持多种类型的索引,每种索引都有其特定的用途和优化方式。以下是MySQL中常见的几种索引类型:1.主键索引(PrimaryKeyIndex)定义:主键索引是一种特殊的唯一索引,它不允许有NULL值,且表中每一行数据......
  • 9章10节:用R实现分层随机化
    在临床试验和其他科学研究中,随机化是一种常见的分配方法,用于将研究对象随机分配到不同的处理组或对照组。这有助于消除潜在的混杂因素,确保研究结果的公正性。然而,在某些情况下,已知的协变量(如年龄、性别、疾病严重程度)可能对结果有显著影响。如果不加以控制,这些协变量可能会导......
  • Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局
     作者|海野AI圈子的红人,AI大神AndrejKarpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为EurekaLabs的人工智能+教育公司 ,宣布将长期致力于AI原生教育。近日,AndrejKarpathy接受了NoPriors(投资博客)的采访,与硅谷知名投资人SaraGuo和EladG......
  • 实操触发器的使用 mysql 20240918_102020
    需求新建日志表用于记录老师表的数据化情况起个名字teacher_log需要的列idoperationmsg建老师日志表CREATETABLEteacher_log( idINTPRIMARYKEYAUTO_INCREMENT, operationVARCHAR(11)NOTNULL, msgVARCHAR(200)NOTNULL);定义添加触发器如果往老师表tea......
  • 这10种分布式ID,太绝了!
    前言分布式ID,在我们日常的开发中,其实使用的挺多的。有很多业务场景在用,比如:分布式链路系统的trace_id单表中的主键Redis中分布式锁的key分库分表后表的id今天跟大家一起聊聊分布式ID的一些常见方案,希望对你会有所帮助。1UUIDUUID(UniversallyUniqueIDentifier)通......
  • P1073 [NOIP2009 提高组] 最优贸易
    大佬题解感觉分层图的做法太nb了吧,每次向下连边更新权值,我确实没什么补充的了,还是看大佬的吧。#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintN=1e7+10;intn,m;intval[N];intcnt;inthead[N];structss{ intto,w,next;}a[N];voi......
  • LP-MSPMOC1104设备设置指南
    I.引言A.介绍LP-MSPMOC1104设备1.设备概述:LP-MSPMOC1104是一款集成了多种接口和功能的高级微型控制器,适用于各种硬件交互应用。2.主要特点:该设备配备了24MHzArmCortex处理器、16KBFlash存储、4KBRAM、12-bit1.5MSPSADC、UART、I2C和SPI接口。B.设置界面概览1.界......
  • 第七章习题14-输入10个学生5门课的成绩,分别用函数实现下列功能:①计算每个学生的平均分
     ......
  • 洛阳师范学院 ACM实验室 中秋娱乐赛“月饼代码大逃杀”题解
    题解包括C和C++两种语言_壹我要洋人死!1、直接输出即可C语言题解:#include<stdio.h>intmain(){printf("woyaoyangrensi!");return0;}C++语言题解:#include<iostream>usingnamespacestd;intmain(){ printf("woyaoyangrensi!"); return0;}......
  • GYM 105262 L
    题目描述我们定义\(F_0=a,F_i=F_{i-1}+b+F_{i-1}(i\ge1)\),这里加法是指将字符串拼接。给定一个字符串\(S=F_{A_1}+F_{A_2}+\dots+F_{A_N}\),接着我们将对\(S\)进行一系列变换知道无法进行变换为止:选择一个\(1\lei<|S|且S_i=S_{i+1}\),删除\(S_{i+1}\),并将\(S_i\)替......