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

news2024/11/20 10:47:01

前言

        上一章我们用开发板作为UDP Server进行数据回环测试,本章我们让我们的开发板作为UDP Client进行数据回环测试。

连接方式

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

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

测试工具

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

回环测试

1.相关代码

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

int32_t loopback_udpc(uint8_t sn, uint8_t* buf, uint8_t* destip, uint16_t destport)
{
   int32_t ret;
   uint16_t size = 0, sentsize=0;

   static uint16_t any_port = 50000;

   switch(getSn_SR(sn))
   {
      case SOCK_UDP :
         sendto(sn, "test", 4, destip, destport);
         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);
#endif
               return 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);
#endif
                  return 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);
#endif
         if((ret = socket(sn, Sn_MR_UDP, any_port, 0x00)) != sn)
            return ret;
#ifdef _LOOPBACK_DEBUG_
         printf("%d:Opened, UDP loopback, port [%d]\r\n", sn, any_port);
#endif   
         break;
      default :
         break;
   }
   return 1;
   
}

然后我们初始化网络配置信息,目标IP(本机电脑IP)和目标端口,在主函数里循环调用测试函数即可。如下所示:

#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;   //UDP Server listener port
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 client example.\r\n");
    sleep_ms(2000);
    wizchip_setnetinfo(&net_info);
    print_network_information(get_info);
    sleep_ms(2000);   
}

2.测试现象

编译烧录后,打开串行监视器,看到网络信息配置成功后,打开两个网络调试助手,参数依次设置为UDP、开发板初始化的目标IP和目标端口,远程主机地址和端口为我们开发板的本地IP和端口,注意这里的端口是在回环函数内部实现的,这里为50000,注意区分UDP Server模式下的本地端口,打开后我们即可看到收到开发板主动发来的数据,然后我们发送0~9十个阿拉伯数字,可以看到串口打印收到的数据,而且调试助手也分别收到了对应回传的数据。如下图所示:

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

 相关链接 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/885839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

做线上虚拟展馆多少钱?如何通过线上虚拟展馆引流到线下?

引言&#xff1a; 在数字化时代的推动下&#xff0c;线上虚拟展馆正以全新的方式重新定义着展览体验。虚拟展馆是基于3D技术构建的数字空间&#xff0c;将传统的展览内容以数字化形式呈现&#xff0c;为参观者提供逼真的探索体验。这种前所未有的数字交互方式不仅为参观者带来…

没学C++,如何从C语言丝滑过度到python【python基础万字详解】

大家好&#xff0c;我是纪宁。 文章将从C语言出发&#xff0c;深入介绍python的基础知识&#xff0c;也包括很多python的新增知识点详解。 文章目录 1.python的输入输出&#xff0c;重新认识 hello world&#xff0c;重回那个激情燃烧的岁月1.1 输出函数print的规则1.2 输入函…

空洞卷积学习笔记

文章目录 1. 扩张卷积的提出2. 理解的难点 本片博客的主题思路来自于这篇文章——如何理解Dilated Convolutions(空洞卷积)&#xff0c;但是作者似乎是很久之前写的&#xff0c;文字的排版很混乱&#xff0c;自己来写一个新的。 1. 扩张卷积的提出 Multi-Scale Context Aggre…

【Git】(二)分支

1、创建分支 已存在主分支master&#xff0c;现在需要创建v1.0的版本&#xff0c;一般直接在web页面操作。 v1.0分支&#xff0c;基线master&#xff0c;称为项目分支。 假如&#xff0c;v1.0项目存在两个项目成员sunriver2000和snow&#xff0c;一般还会再针对个人创建个人…

2023一建考点精编

1Z301030建设工程代理制度 1.代理是指代理人在被授予的代理权限范围内&#xff0c;以被代理人的名义与第三人实施法律行为&#xff0c;而行为后果由该被代理人承担的法律制度。代理涉及三方当事人&#xff0c;即被代理人、代理人和代理关系所涉及的第三人。 2.代理包括委托代…

接口测试工具——Postman测试工具 Swagger接口测试+SpringBoot整合 JMeter高并发测试工具

目录 Postman测试工具接口测试工具swaggerKnife4j1.引入依赖2.配置3.常用注解4.接口测试 JMeter什么是JMeter?JMeter安装配置1.官网下载2.下载后解压3.汉语设置 JMeter的使用方法1.新建线程组2.设置参数3.添加取样器4.设置参数&#xff1a;协议&#xff0c;ip&#xff0c;端口…

为什么说电子商务个性化是所有跨境电商需要关心的?

电子商务个性化就是个性化客户体验的行为&#xff0c;以便每个购物者都是独一无二的&#xff0c;比如您可以收到来自包含您的名字的品牌的电子邮件等&#xff0c;或者当您在线购物并查看基于您以前的浏览历史记录的商品推荐&#xff0c;这些就是购物个性化。如今很多企业都开始…

使用虚拟环境conda安装不同版本的cuda,cudnn,pytorch

背景&#xff1a;在学习深度学习时&#xff0c;我们不可避免的需要跑多个神经网络&#xff0c;而不同的神经网络环境都不一样&#xff0c;所以必须要使用到虚拟环境(如conda)去做环境隔离&#xff0c;安装属于自己的环境。在这环境中&#xff0c;大多神经网络都必须要用到cuda&…

【RocketMQ】安装

文章目录 下载RocketMQ配置环境变量 下载RocketMQ 下载RocketMQ安装包 下载DashBoard 这里版本推荐选择4.9.x&#xff0c;因为比较稳定。 下载完毕之后&#xff0c;将安装包拖入到Linux环境。 之后使用unzip命令解压缩RocketMQ的安装包。 unzip ./rocketmq-all-4.9.2-bin-rel…

Springboot 实践(6)spring security配置与运用

前文讲解了springboot项目添加静态资源目录&#xff0c;到目前为止&#xff0c;项目已经建立了后台服务控制、静态资源目录等服务&#xff1b;项目开发是为特定用户服务的&#xff0c;不具备访问权限用户&#xff0c;不允许访问系统&#xff0c;那么如何对系统资源进行保护呢&a…

操作系统-笔记-第二章-进程

目录 二、第二章——【进程】 1、进程的概念 &#xff08;1&#xff09;PID & PCD 进程控制块 &#xff08;2&#xff09;程序段 & 数据段 &#xff08;3&#xff09;特征 &#xff08;特性&#xff09; property &#xff08;4&#xff09;总结 2、进程的状态 …

配置应用/配置权限提升

配置应用 配置 servera 上的应用 ex200 &#xff0c;要求如下&#xff1a;当以用户 pandora 运行 ex200 时&#xff0c;它将显示 borough lively excursion nephew scarce find / | grep ex200 which ex200wim /usr/local/bin/ex200 echo borough lively excursion nephew …

【Java集合框架面试题(30道)】

文章目录 Java集合框架面试题(30道)引言1.说说有哪些常见集合&#xff1f; List2.ArrayList和LinkedList有什么区别&#xff1f;3.ArrayList的扩容机制了解吗&#xff1f;4.ArrayList怎么序列化的知道吗&#xff1f;为什么用transient修饰数组&#xff1f;5.快速失败&#xff0…

工厂无线安灯呼叫系统解决方案

在现代制造业中&#xff0c;生产线的高效运作是企业成功的关键之一。为了实现生产线的顺畅运转&#xff0c;安灯系统成为了制造业生产现场的必备工具。安灯系统是一个专门应用软硬件系统&#xff0c;旨在快速联络生产、物料、维修、主管等部门&#xff0c;以满足生产线的需求并…

【STM32RT-Thread零基础入门】 5. 线程创建应用(线程创建、删除、初始化、脱离、启动、睡眠)

硬件&#xff1a;STM32F103ZET6、ST-LINK、usb转串口工具、4个LED灯、1个蜂鸣器、4个1k电阻、2个按键、面包板、杜邦线 文章目录 前言一、线程管理接口介绍二、任务&#xff1a;使用多线程的方式同时实现led闪烁和按键控制喇叭&#xff08;扫描法&#xff09;1. RT-Thread相关接…

根据两组相关联数据(部门 + 用户),生成列表树

文章目录 背景想要得到的数据格式业务层获取数据&#xff0c;部门及用户&#xff0c;构建树结构TreeUtil生成的格式部门实体用户实体 背景 目前拥有用户和部门两组数据&#xff0c;根据部门和用户的关系&#xff0c;生成部门树&#xff0c;且每个部门下拥有哪些与子部门同级的…

接口自动化测试框架搭建

为什么要做&#xff08;自动化&#xff09;接口测试&#xff1f; 1、由于现在各个系统的复杂度不断上升&#xff0c;导致传统的测试方法成本上升且测试效率大幅下降&#xff0c;而接口测试相对于UI测试更加稳定&#xff0c;且相对容易实现自动化持续集成&#xff0c;可以减少人…

Spring BeanDefinition 也分父子关系?

在 Spring 框架中&#xff0c;BeanDefinition 是一个核心概念&#xff0c;用于定义和配置 bean 的元数据&#xff0c;虽然在实际应用中&#xff0c;我们一般并不会或者很少直接定义 BeanDefinition&#xff0c;但是&#xff0c;我们在 XML 文件中所作的配置&#xff0c;以及利用…

数字化智慧工地云平台,劳务实名制系统、视频监控系统、环境监测系统、人员定位系统、工资代发系统、AI识别系统、视频监控系统

智慧工地概念 智慧工地是一种崭新的工程全生命周期管理理念&#xff0c;是指运用信息化手段&#xff0c;通过对工程项目进行精确设计和施工模拟&#xff0c;围绕施工过程管理&#xff0c;建立互联协同、智能生产、科学管理的施工项目信息化生态圈&#xff0c;并将此数据在虚拟…

RabbitMQ的5种消息队列

RabbitMQ的5种消息队列 1、七种模式介绍与应用场景 1.1 简单模式(Hello World) 一个生产者对应一个消费者&#xff0c;RabbitMQ 相当于一个消息代理&#xff0c;负责将 A 的消息转发给 B。 应用场景&#xff1a;将发送的电子邮件放到消息队列&#xff0c;然后邮件服务在队列…