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

W5500-EVB-PICO 做UDP Server进行数据回环测试(七)

前言

        前面我们用W5500-EVB-PICO 开发板在TCP Client和TCP Server模式下,分别进行数据回环测试,本章我们将用开发板在UDP Server模式下进行数据回环测试。

UDP是什么?什么是UDP Server?能干什么?

        UDP (User Dataqram Protocol) 是一种无连接的、不可靠的传输协议,用于在计算机网络上传输数据UDP Server是指UDP网络服务的服务器端连接,用于接收客户端的数据报文并返回响应,实现网络数据的交互。
        UDP Server的主要作用是接收客户端发送的数据报文,并进行处理和响应。通过UDP Server,客户端可以将数据报文发送到服务器,并从服务器接收响应。由于UDP是无连接的,因此每个数据报文都是独立处理的,服务器对于未收到的数据报文不会重传。
        在UDP Server中,服务器程序需要指定监听的端口号,并使用UDP协议接收客户端发送的数据报文。一旦接收到数据报文,服务器程序会对报文进行处理,并返回相应的响应报文。
        因此,UDP Server可以帮助设备实现数据报文的快速传输和响应,适用于一些对于数据传输速度和实时性要求较高的应用,如视频直播、语音通话等。在UDP Server中,由于数据报文的传输是不可靠的,因此需要客户端程序进行重传和超时处理,以保证数据的可靠传输。

UDP Server 和 UDP Client有何不同?

UDP服务器:

  • 首先初始化
  • 打开特定端口监听
  • 可以接受多个客户端连接

UDP客户端:

  • 指定目标IP和端口
  • 发送数据

从套接字编程角度来看,两者完全相同。因此我们仅用UDP Server来做数据回环测试。

连接方式

使开发板和我们的电脑处于同一网段:

  • 开发板通过交叉线直连主机
  • 开发板和主机都接在路由器LAN口

测试工具

  • 网路调试工具(任意)
  • wireshark抓包工具

回环测试

1.相关代码

我们打开例程中库文件的loopback.c文件,可以看到udp server回环测试函数,它有三个参数:socket(套接字)端口号(0~7个端口,可开8路socket)、数据收发缓存buf、监听端口;原理上依旧是通过Switch状态机轮询socket端口(所开端口的套接字)状态,根据不同状态做出相应处理,与tcp不同的是,udp只有做了两个状态处理,如果为关闭状态就初始化socket状态为udp协议模式,并开始监听设置的端口;如果状态已经处于udp模式,即socket初始化后,就进行判断是否收到数据,收到就进行回传。如下所示:

int32_t loopback_udps(uint8_t sn, uint8_t* buf, uint16_t port)
{int32_t  ret;uint16_t size, sentsize;uint8_t  destip[4];uint16_t destport;switch(getSn_SR(sn)){case SOCK_UDP :if((size = getSn_RX_RSR(sn)) > 0){if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;ret = recvfrom(sn, buf, size, destip, (uint16_t*)&destport);buf[ret]=0x00;printf("recv form[%d.%d.%d.%d][%d]: %s\n", destip[0],destip[1],destip[2],destip[3],destport,buf);if(ret <= 0){
#ifdef _LOOPBACK_DEBUG_printf("%d: recvfrom error. %ld\r\n",sn,ret);
#endifreturn ret;}size = (uint16_t) ret;sentsize = 0;while(sentsize != size){ret = sendto(sn, buf+sentsize, size-sentsize, destip, destport);if(ret < 0){
#ifdef _LOOPBACK_DEBUG_printf("%d: sendto error. %ld\r\n",sn,ret);
#endifreturn ret;}sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero.}}break;case SOCK_CLOSED:
#ifdef _LOOPBACK_DEBUG_//printf("%d:UDP loopback start\r\n",sn);
#endifif((ret = socket(sn, Sn_MR_UDP, port, 0x00)) != sn)return ret;
#ifdef _LOOPBACK_DEBUG_printf("%d:Opened, UDP loopback, port [%d]\r\n", sn, port);
#endifbreak;default :break;}return 1;
}

然后我们在主函数里循环调用测试函数即可。可以看到里面还注释了一个udp client回环测试函数,这个基本跟udp server相同,独立出来是为了方便用户自己进行测试,这里不在演示。如下所示:

#define SOCKET_ID 0
#define ETHERNET_BUF_MAX_SIZE (1024 * 2)void network_init(void);wiz_NetInfo net_info = {.mac = {0x00, 0x08, 0xdc, 0x16, 0xed, 0x2e},.ip = {192, 168, 1, 10},.sn = {255, 255, 255, 0},.gw = {192, 168, 1, 1},.dns = {8, 8, 8, 8},.dhcp = NETINFO_STATIC};
wiz_NetInfo get_info;
static uint8_t ethernet_buf[ETHERNET_BUF_MAX_SIZE] = {0,};
static uint8_t destip[4]={192, 168, 1, 2};
static uint16_t destport = 8080;
static uint16_t local_port =8000;
int main()                                                          
{   stdio_init_all();sleep_ms(2000);network_init();while(true){// loopback_udpc(SOCKET_ID, ethernet_buf, destip, destport);loopback_udps(SOCKET_ID, ethernet_buf, local_port);sleep_ms(500);}}void network_init(void)
{uint8_t temp;wizchip_initialize();printf("W5500 udp test example.\r\n");sleep_ms(2000);wizchip_setnetinfo(&net_info);print_network_information(get_info);sleep_ms(2000);   
}

2.测试现象

编译烧录后,打开串行监视器,看到网络信息配置成功后,打开两个网络调试助手,参数依次设置为UDP、本机的IP、8080,注意另一个调试助手的端口参数设置跟第一个不可以相同,避免冲突;这里将其设置为8081,完成后打开;然后远程IP和端口选择我们开发板设置的IP和端口,我这里是192.168.1.10 : 8000,然后我们让第一个调试助手发送0~9十个阿拉伯数字,第二个发送字符串:hello wiznet,可以看到串口打印收到不同客户端的数据,而且调试助手也分别收到了相对应的数据回传。如下图所示:

 我们可以打开wireshark抓包工具,输入命令<ip.addr == 192.168.1.10 and udp>过滤数据包(IP地址改成自己电脑的IP或者开发板的IP地址即可);然后两个调试助手依次发送,可以到抓到的数据包。如下图所示:

相关链接 

本章相关例程链接https://gitee.com/wiznet-hk/w5500-evb-pico-routine.git

相关文章:

W5500-EVB-PICO 做UDP Server进行数据回环测试(七)

前言 前面我们用W5500-EVB-PICO 开发板在TCP Client和TCP Server模式下&#xff0c;分别进行数据回环测试&#xff0c;本章我们将用开发板在UDP Server模式下进行数据回环测试。 UDP是什么&#xff1f;什么是UDP Server&#xff1f;能干什么&#xff1f; UDP (User Dataqram P…...

ES搜索引擎入门+最佳实践(九):项目实战(二)--elasticsearch java api 进行数据增删改查

本篇是这个系列的最后一篇了,在这之前可以先看看前面的内容: ES搜索引擎入门最佳实践(一)_flame.liu的博客-CSDN博客 ES搜索引擎入门最佳实践(二)_flame.liu的博客-CSDN博客 ES搜索引擎入门最佳实践(三)_flame.liu的博客-CSDN博客 ES搜索引擎入门最佳实践(四)_flame.liu的博…...

android内存分析工具记录,请利用好最后2个神器

相机见证了java内存暴增和native持续增长的问题&#xff0c;因此这里记录一下使用的工具情况&#xff0c;方便后续继续使用 一、java 内存 如果是java层的内存可以直接借助leakCanary工具&#xff0c;配置也很简单&#xff0c;直接在build.gradle中添加依赖即可&#xff1a; …...

安科瑞变电所运维平台在电力系统中应用分析

摘要&#xff1a;现代居民生活、工作对电力资源的需求量相对较多&#xff0c;给我国的电力产业带来了良好的发展机遇与挑战。探索电力系统基本构成&#xff0c; 将变电运维安全管理以及相应的设备维护工作系统性开展&#xff0c;能够根据项目实践工作要求&#xff0c;将满足要求…...

uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册

引言 我使用到painter的原因是&#xff0c;在uniapp开发微信小程序时&#xff0c;需要将一个页面的内容转换成图片保存到本地相册。 起初在网上找到很多都是在uniapp中使用 html2canvas 将网页转换成图片再jspdf将图片转换为pdf&#xff0c;但是这种方式在小程序环境不支持&am…...

790. 数的三次方根

文章目录 QuestionIdeasCode Question 给定一个浮点数 n &#xff0c;求它的三次方根。 输入格式 共一行&#xff0c;包含一个浮点数 n 。 输出格式 共一行&#xff0c;包含一个浮点数&#xff0c;表示问题的解。 注意&#xff0c;结果保留 6 位小数。 数据范围 −10000≤…...

POSTGRESQL 关于2023-08-14 数据库自动启动文章中使用KILL 来进行配置RELOAD的问题解释...

开头还是介绍一下群&#xff0c;如果感兴趣Polardb ,mongodb ,MySQL ,Postgresql ,redis &#xff0c;SQL SERVER ,ORACLE,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加 liuaustin3微信号 &…...

vue 使用插件高德地图--vue-amap

第一步&#xff1a;安装 vue-amap npm install vue-amap第二步&#xff1a;在你的 Vue 项目中注册 vue-amap&#xff1a; // main.js import Vue from vue; import VueAMap from vue-amap;Vue.use(VueAMap);VueAMap.initAMapApiLoader({// 高德开发者平台申请key值key: cc9c098…...

减速比如何计算

减速比是用来衡量机械系统中输入轴和输出轴转速之间的比例关系&#xff0c;通常用来描述传动装置&#xff08;如齿轮传动、皮带传动等&#xff09;的效果。计算减速比的公式取决于传动装置的类型。以下是一些常见传动装置的减速比计算方法&#xff1a; 齿轮传动&#xff1a; 对…...

HarmonyOS/OpenHarmony应用开发-ArkTSAPI组件总体分类与说明(下)

六、文本与输入 Text 显示一段文本的组件。 Span 作为Text组件的子组件&#xff0c;用于显示行内文本片段的组件。 Search 搜索框组件&#xff0c;适用于浏览器的搜索内容输入框等应用场景。 TextArea 多行文本输入框组件&#xff0c;当输入的文本内容超过组件宽度时会自动换行…...

势函数和鞅的停时定理

前置芝士 鞅&#xff1a; 鞅是一类特殊的随机过程&#xff0c;假设我们从一开始就在观察一场赌博游戏&#xff0c;现在已经得到了前t秒的观测值&#xff0c;那么当第t1 秒观测值的期望等于第t秒的观测值时&#xff0c;我们称这是一个公平赌博游戏。 具体来说&#xff0c;对于…...

途乐证券-炒股开户流程是怎样的?

炒股是一种危险较大但收益也相对较高的出资方法&#xff0c;而开户则是出资炒股的前提。跟着科技的开展&#xff0c;炒股开户已经能够在线完结&#xff0c;但流程相对来说仍是比较繁琐的。那么&#xff0c;炒股开户流程是怎样的呢&#xff1f;下面从多个视点剖析。 一、炒股开户…...

Eclipse如何设置快捷键

在eclopse设置注释行和取消注释行 // 打开eclipse&#xff0c;依次打开&#xff1a;Window -> Preferences -> General -> Key&#xff0c;...

刷享全球美好 中信银行信用卡推出跨境消费系列活动

来源 | 镭射财经&#xff08;leishecaijing&#xff09; 日前&#xff0c;文旅部办公厅发布通知&#xff0c;恢复全国旅行社及在线旅游企业经营中国公民赴有关国家和地区&#xff08;第三批&#xff09;出境团队旅游和“机票酒店”业务&#xff0c;出境跟团游国家和地区由此前…...

LeetCode算法心得——限制条件下元素之间的最小绝对差(TreeSet)

大家好&#xff0c;我是晴天学长&#xff0c;今天用到了Java一个非常实用的类TreeSet&#xff0c;能解决一些看起来棘手的问题。 1 &#xff09;限制条件下元素之间的最小绝对差 2) .算法思路 初始化变量&#xff1a;n为列表nums的大小。 min为整型最大值&#xff0c;用于记录…...

MySQL表的基础操作(crud)

1. 新增&#xff08;Create&#xff09; insert into 表名 values (值, 值…); 此处列出的这些值,的数目和类型要和表的列相匹配。 -- 在student 表中插入学号1&#xff0c;姓名zhangsan的数据 insert into student values(1, zhangsan); -- 指定列插入 insert into student …...

vue中的activated和deactivated

目录 一、简介二、使用 一、简介 当页面被keep-alive缓存下来的时候&#xff0c;vue提供两个钩子函数 activated被 keep-alive 缓存的组件激活时调用。deactivated被 keep-alive 缓存的组件失活时调用。 当keepalive页面缓存&#xff0c;有activated钩子和created钩子函数时 …...

unity 发布报错 The type or namespace name `UnityEditor‘ could not be found.

引用了UnityEditor的内容&#xff0c;发布当然会报错啦 加上宏判断就好啦...

在ubuntu中将dict.txt导入到数据库sqlite3

将dict.txt导入到数据库 #include <head.h> #include <sqlite3.h> int do_insert(int i,char *str,sqlite3 *db); int main(int argc, const char *argv[]) {//创建泵打开一个数据库sqlite3 *db NULL;if(sqlite3_open("./my.db",&db) ! SQLITE_OK){…...

nginx 代理postgresql

首先&#xff0c;Nginx为我们的数据库增加了额外的安全层。Nginx提供了一整套的选项&#xff0c;这使得管理访问和保护数据库变得很容易。例如&#xff0c;我们可以配置为只有一小部分IP地址可以访问数据库。 PostgreSQL不使用HTTP或HTTPS&#xff0c;而是使用一个新块儿strea…...

小程序 CSS-in-JS 和原子化的另一种选择

小程序 CSS-in-JS 和原子化的另一种选择 小程序 CSS-in-JS 和原子化的另一种选择 介绍快速开始 pandacss 安装和配置 0. 安装和初始化 pandacss1. 配置 postcss2. 检查你的 panda.config.ts3. 修改 package.json 脚本4. 全局 css 注册 pandacss5. 配置的优化与别名 weapp-pand…...

flutter项目 环境搭建

开发flutter项目 搭建工具环境 flutter项目本身 所需开发工具环境 flutter 谷歌公司开发 系统支持库 镜像库 搭建流程&#xff1a; flutter 官网&#xff1a; https://flutter.dev/community/china //步骤1 .bash_profile touch .bash_profile pwd /Users/haijunyan open ~ e…...

PG-DBA培训12:PostgreSQL物理备份与恢复实战

一、风哥PG-DBA培训12&#xff1a;PostgreSQL物理备份与恢复实战 课程目标&#xff1a; 本课程由风哥发布的基于PostgreSQL数据库的系列课程&#xff0c;本课程属于PostgreSQL备份恢复与迁移升级阶段之PostgreSQL物理备份与恢复实战&#xff0c;学完本课程可以掌握&#xff1…...

饿了么大数据开发凉经

1 一个mapreduce进程会启动多少map进程多少reduce进程* 1&#xff09;map数量由处理的数据分成的block数量决定default_num total_size / split_size; 2&#xff09;reduce数量为job.setNumReduceTasks(x)中x 的大小。不设置的话默认为 1。 2 讲下shuffle的过程 shuffle分为…...

前端安全:XSS 与 CSRF 安全防御

在当今数字化的时代&#xff0c;前端安全性变得愈发重要。跨站脚本攻击&#xff08;XSS&#xff09;和跨站请求伪造&#xff08;CSRF&#xff09;是常见的前端安全威胁&#xff0c;但通过一些简单的防御策略&#xff0c;我们可以有效地保护我们的应用程序和用户信息。本文将为您…...

应用层读取wfp防火墙阻断记录

前言 之前的文档中&#xff0c;描写了如何对WFP防火墙进行操作[链接在此]&#xff0c;这篇文档中&#xff0c;描述如何获取WFP防火墙进行阻断的操作记录。 需要注意的坑点 使用FWPM_NET_EVENT_TYPE获取防火墙日志时&#xff0c;需要注意&#xff0c;只有丢弃和内核丢弃&…...

web基础和tomcat的安装,部署jpress应用

目录 1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8&#xff0c;配置服务启动脚本&#xff0c;部署jpress应用。 1. 简述静态网页和动态网页的区别。 【1】定义区别 请求响应信息&#xff0c;发给客户端进行处理&#xff0c;由浏览…...

idea git命令使用

这个标签标识单签分支&#xff1a;&#xff08;标签图标&#xff09; 标识关联分支&#xff1a;&#xff08;五角星&#xff09; 本地切换分支&#xff1a;如当前分支是dev ,git branch 显示的是dev ,然后通过 git checkout -b release 切换到release分支 git checkout re…...

软件测试技术之单元测试—工程师 Style 的测试方法

什么是单元测试&#xff1f; Wikipedia 对单元测试的定义&#xff1a; 在计算机编程中&#xff0c;单元测试&#xff08;Unit Testing&#xff09;又称为模块测试&#xff0c;是针对程序模块&#xff08;软件设计的最小单位&#xff09;来进行正确性检验的测试工作。 在实际…...

C#学习....

1.基础 //引用命名空间using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;//项目名或者命名空间 namespace _01_MY_First_Demo {//Program类class Program{//程序的主入口或者Main函数static void Main(S…...