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

news2025/1/15 20:59:40

 前言

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

连接方式

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

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

测试工具

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

回环测试

1.相关代码

我们打开例程中库文件的loopback.c文件,可以看到udp server回环测试函数,它有四个参数:socket(套接字)端口号(0~3个端口,可开4路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("W5100S 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/w5100s-evb-pico-routine.git

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

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

相关文章

神采PromeAI,设计师的高效创作搭子

2023年&#xff0c;没有一个打工人不关注AI&#xff0c;也没有一个老板不想乘上AI东风、革新行业的梦。在生成式AI的可控性越强&#xff0c;对市场和产业的颠覆性就越大&#xff01; 神采PromeAI的可控性得到许多用户的认可&#xff0c;网站已上线草图渲染、照片转线稿、涂抹替…

UDP数据报结构分析(面试重点)

在传输层中有UDP和TCP两个重要的协议&#xff0c;下面将针对UDP数据报的结构进行分析 UDP结构图示 UDP报头结构的分析 UDP报头有4个属性&#xff0c;分别是源端口&#xff0c;目的端口&#xff0c;UDP报文长度&#xff0c;校验和&#xff0c;它们都占16位2个字节&#xff0c;所…

CSS自己实现一个步骤条

前言 步骤条是一种用于引导用户按照特定流程完成任务的导航条&#xff0c;在各种分步表单交互场景中广泛应用。例如&#xff1a;在HIS系统-门诊医生站中的接诊场景中&#xff0c;我们就可以使用步骤条来实现。她的执行步骤分别是&#xff1a;门诊病历>遗嘱录入>完成接诊…

福昕阅读器文档无法高亮的问题 转

转自福昕阅读器文档无法高亮的问题_福昕pdf高亮用不了_没有价值的生命的博客-CSDN博客 最近在阅读一篇PDF文档时&#xff0c;对一些内容进行高亮时&#xff0c;发现不能够进行高亮&#xff0c;然后通过在网上查找解决方法算是解决了我的问题。下面我将总结2点不能进行注释的情…

无涯教程-Perl - sqrt函数

描述 此函数返回EXPR的平方根&#xff1b;如果省略,则返回$_。大多数情况下,此函数返回浮点数。 语法 以下是此函数的简单语法- sqrt EXPRsqrt返回值 该函数返回浮点数。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -w$resultsqrt(4); print " sqrt(4) …

2024第12届国际生物发酵展,3月6-8日济南举办

2024第12届国际生物发酵产品与技术装备展&#xff08;济南展&#xff09; 2024年3月6-8日 | 山东国际会展中心 2024第13届国际生物发酵产品与技术装备展&#xff08;上海展&#xff09; 2024年8月7-9日 | 上海新国际博览中心 主办单位&#xff1a; …

采用nodejs+vue语言和mysql汽车4s店服务管理系统 _od8k

为设计一个安全便捷&#xff0c;并且使用户更好获取本汽车服务信息&#xff0c;本文主要以安全、简洁为理念&#xff0c;实现用户快捷寻找汽车服务信息&#xff0c;从而解决汽车服务信息复杂难辨的问题。该系统以vue架构技术为基础&#xff0c;采用nodejs语言和mysql数据库进行…

终于理解正向代理和反向代理的联系和区别啦~

正向代理、反向代理 正向代理反向代理联系区别 正向代理 正向代理&#xff08;forward proxy&#xff09;&#xff1a;是一个位于客户端和目标服务器之间的服务器(代理服务器)&#xff0c;为了从目标服务器取得内容&#xff0c;客户端向代理服务器发送一个请求并指定目标&…

实时设备状态监测与故障诊断:制造业转型的驱动力

在当今快节奏、高竞争的制造业环境中&#xff0c;生产效率和设备可靠性成为企业成功的关键。随着技术的不断发展&#xff0c;实时设备状态监测与故障诊断正成为制造业转型的重要驱动力。这一创新技术不仅提供了提前预警和预测性维护&#xff0c;还为制造商带来了更高的生产效率…

事务异常:Transaction rolled back because it has been marked as rollback-only解决方案

目录 事务的概念为何需要事务事务异常的原因解决方案1、方案1&#xff08;一般采用这种&#xff09;2、方案2 事务的概念 事务这个词&#xff0c;其实我们最先接触的地方应该是数据库&#xff0c;我们会知道事务有着四种特性&#xff0c;分别是&#xff1a; 原子性&#xff1…

windows11 修改默认存储位置

windows11 修改默认存储位置 https://zhuanlan.zhihu.com/p/367637690

SCS【31】减少障碍,加速单细胞研究数据库(Single Cell PORTAL)

细胞生信分析教程 桓峰基因公众号推出单细胞生信分析教程并配有视频在线教程&#xff0c;目前整理出来的相关教程目录如下&#xff1a; Topic 6. 克隆进化之 Canopy Topic 7. 克隆进化之 Cardelino Topic 8. 克隆进化之 RobustClone SCS【1】今天开启单细胞之旅&#xff0c;述说…

SElinux 导致 Keepalived 检测脚本无法执行

哈喽大家好&#xff0c;我是咸鱼 今天我们来看一个关于 Keepalived 检测脚本无法执行的问题 一位粉丝后台私信我&#xff0c;说他部署的 keepalived 集群 vrrp_script 模块中的脚本执行失败了&#xff0c;但是手动执行这个脚本却没有任何问题 这个问题也是咸鱼第一次遇到&…

koa2脚手架koa-generator的使用

koa2脚手架的基本使用 简介前言&#xff1a;使用koa2的脚手架koa-generator,使用非常简单&#xff0c;容易上手 首先&#xff0c;我们需要全局安装 npm install -g koa-generator安装成功后&#xff0c;需要创建项目 koa2 koapro[koapro 项目名称] 或者 koa2 -e [koapro 项目名…

华为网络篇 RIP路由手工汇总-27

难度2复杂度2 目录 一、实验原理 二、实验拓扑 三、实验步骤 四、实验过程 总结 一、实验原理 在网络规划过程中&#xff0c;我们避免不了使用VLSM技术&#xff0c;但是使用VLSM后会有一个问题&#xff0c;就是子网较多时会占用系统资源。我们可以使用路由汇总的方法&…

Doris Summit 2023 正式启航,议题征集 合作伙伴招募火热进行中

在数字化进程不断演进的时代&#xff0c;数据呈现爆发增长。在这数据洪流之中&#xff0c;数据实时分析的重要性愈发凸显&#xff0c;并成为企业成功的关键要素。 作为专注于实时分析的开源实时数据仓库 Apache Doris&#xff0c;从开源至今已走过 6 个年头&#xff0c;这些年…

学习笔记十九:Pod常见的状态和重启策略

Pod常见的状态和重启策略 常见的pod状态第一阶段&#xff1a;第二阶段&#xff1a;扩展&#xff1a; pod重启策略测试Always重启策略正常停止容器内的tomcat服务非正常停止容器里的tomcat服务 测试never重启策略正常停止容器里的tomcat服务非正常停止容器里的tomcat服务 测试On…

配置 NTP

server host.domain8.rhce.cc iburst配置 NTP 配置 node1 作为 NTP 的客户端&#xff0c;跟时间服务器 host.domain8.rhce.cc 同步时间。 yum install chrony 安装chrony软件包 systemctl status chronyd 查看chronyd服务是否开启&#xff0c;没有开启使用一下任何一条…

【mysql】事务的四种特性的理解

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

Codeforces Round 893 (Div. 2)

A.首先题目意思就是看谁拥有的按钮多&#xff0c;所以优先按c的按钮&#xff0c;按两次c等于没按&#xff0c;所以最后看c的奇偶&#xff0c;奇数代表第一个人能多拥有一个&#xff0c;最后判断第一个人和第二个人拥有的总数即可 #include<bits/stdc.h> using namespace…