W5500-EVB-PICO主动PING主机IP检测连通性(十)

这篇具有很好参考价值的文章主要介绍了W5500-EVB-PICO主动PING主机IP检测连通性(十)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

        上一章我们用W5500_EVB_PICO 开发板做UDP组播数据回环测试,那么本章我们进行W5500_EVB_PICO Ping的测试。

什么是PING?

        Ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序  。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特网报文控制协议)Echo 请求报文,测试目的站是否可达及了解其有关状态。

连接方式

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

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

测试工具

  • 串口调试工具(任意)

测试

1.相关代码

我们打开例程中库文件的w5500_ping.c文件我们先找到ping.c头文件下面看下,可以看到几个函数,我们需要用到如下所示几个函数:Ping_auto要我们传入一个socket端口号和需要Ping的对象IP信息;函数里面用一个Switch状态机,对socket端口状态轮询并进行相应的处理,当状态在SOCK_IPRAW,就开始Ping的工作,成功则返回Ping的信息,Ping失败则打印失败的信息

void ping_auto(uint8_t s, uint8_t *addr)
{
    uint8_t i;
    int32_t len = 0;
    uint8_t cnt=0;
    for(i = 0; i<=3;i++)                                                                        
    {
        sleep_ms(10); 
        switch(getSn_SR(s))                                                                     
        {
            case SOCK_CLOSED:                                                                       
                close(s);
                IINCHIP_WRITE(Sn_PROTO(s), IPPROTO_ICMP);           
                if(socket(s,Sn_MR_IPRAW,3000,0)!=0)                                 
                { }
                while(getSn_SR(s)!=SOCK_IPRAW);
                sleep_ms(1000);                                                                         
                sleep_ms(1000);                                                                         
            break;
                
            case SOCK_IPRAW:                                                                        
                ping_request(s, addr);                                                          
                req++;
                while(1)
                {
                    if ( (len = getSn_RX_RSR(s) ) > 0)
                    {
                        ping_reply(s, addr, len);                                               
                        sleep_ms(50);                                                                   
                        rep++;
                        break;
                    }
                    else if(cnt > 200)
                    {
                        printf( "Request Time out. \r\n");
                        cnt = 0;
                        break;
                    }
                    else
                    {
                        cnt++;
                        sleep_ms(50);                                                                   /*wait 50ms*/
                    }
                    // wait_time for 2 seconds, Break on fail
                }
    
            break;
            default:
            break;
        }
            #ifdef PING_DEBUG
        if(rep!=0)
        {
            printf("Ping Request = %d, PING_Reply = %d\r\n",req,rep);
            if(rep == req)
                printf( "PING SUCCESS\r\n " );
            else
                printf( "REPLY_ERROR\r\n " );
        }   
    else{}      
            #endif  
    }

}

主函数还是和之前一样,先配置好网络信息,然后配置好所要Ping的IP,添加do_ping()函数来执行Ping_auto函数,并将do_ping放在while循环中运行。

#define SOCKET_ID 0
#define ETHERNET_BUF_MAX_SIZE (1024 * 2)

void do_ping(void);
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, 1};
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);
        do_ping();
        if(req>=4)
        {
            close(0);                                   
            break;
        }        
    }
    
}

void network_init(void)
{
    uint8_t temp;
    wizchip_initialize();
    printf("W5500 ping test.\r\n");
    sleep_ms(2000);
    wizchip_setnetinfo(&net_info);
    print_network_information(get_info);
    sleep_ms(2000);   
}
void do_ping(void)
{    
    printf("------------PING_TEST_START-----------------------\r\n");
    sleep_ms(1000); // wait 1000ms
    ping_auto(0,destip);
}

2.烧录现象

我们编译烧录后,打开串行监视器,按下复位键,会打印网络配置信息和所要Ping的ip当Ping成功后串口会打印Ping的信息,出现PING SUCCESS 表示Ping成功。

W5500-EVB-PICO主动PING主机IP检测连通性(十),WIZnet W5500-EVB-Pico  C/C++教程,w5500以太网芯片,树莓派pico,C SDK,嵌入式设备入网教程,wiznet,以太网芯片

相关连接:

本章例程链接文章来源地址https://www.toymoban.com/news/detail-690755.html

到了这里,关于W5500-EVB-PICO主动PING主机IP检测连通性(十)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

            前面我们用W5500-EVB-PICO 开发板在TCP Client和TCP Server模式下,分别进行数据回环测试,本章我们将用开发板在UDP Server模式下进行数据回环测试。         UDP (User Dataqram Protocol) 是一种无连接的、不可靠的传输协议,用于在计算机网络上传输数据UDP Server是指UDP网络

    2024年02月12日
    浏览(42)
  • W5500-EVB-PICO作为TCP Client 进行数据回环测试(五)

            上一章我们用W5500-EVB-PICO开发板通过DNS解析www.baidu.com(百度域名)成功得到其IP地址,那么本章我们将用我们的开发板作为客户端去连接服务器,并做数据回环测试:收到服务器发送的数据,并回传给服务器。         TCP (Transmission Control Protocol) 是一种面向连

    2024年02月13日
    浏览(42)
  • WIZnet W6100-EVB-Pico DHCP 配置教程(三)

           在上一章节中我们讲了网络信息配置,那些网络信息的配置都是用户手动的去配置的,为了能跟电脑处于同一网段,且电脑能成功ping通板子,我们不仅要注意子网掩码,对于IP地址主机位和网络位的划分,而且还要注意不能跟同一网段已有IP地址的重复,对于新手和不

    2024年02月15日
    浏览(43)
  • W6100-EVB-PICO进行UDP组播数据回环测试(九)

            上一章我们用我们的开发板作为UDP客户端连接服务器进行数据回环测试,那么本章我们进行UDP组播数据回环测试。         组播是主机间一对多的通讯模式, 组播是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将一份报文发送到特定的

    2024年02月11日
    浏览(40)
  • W6100-EVB-PICO 做TCP Server进行回环测试(六)

            上一章我们用W6100-EVB-PICO开发板做TCP 客户端连接服务器进行数据回环测试,那么本章将用开发板做TCP服务器来进行数据回环测试。         TCP (Transmission Control Protocol) 是一种面向连接的、可靠的、基于字节流的传输协议,用于在计算机网络上传输数据。TCP Se

    2024年02月13日
    浏览(32)
  • W6100-EVB-PICO 做UDP Server进行数据回环测试(七)

            前面我们用W6100-EVB-PICO 开发板在TCP Client和TCP Server模式下,分别进行数据回环测试,本章我们将用开发板在UDP Server模式下进行数据回环测试。         UDP (User Dataqram Protocol) 是一种无连接的、不可靠的传输协议,用于在计算机网络上传输数据UDP Server是指UDP网络

    2024年02月12日
    浏览(37)
  • C\C++ 使用ping判断ip是否能连通

    文章作者:里海 来源网站: https://blog.csdn.net/WangPaiFeiXingYuan         ping是一种用于测试网络连接的工具,它通过发送数据包到目标设备并等待其响应来工作,以检查网络是否连通。下面是例子.  

    2024年02月17日
    浏览(38)
  • 在Linux系统中,可以使用ping和telnet命令来测试IP地址和端口是否连通

    在Linux系统中,可以使用ping和telnet命令来测试IP地址和端口是否连通。 使用ping命令测试IP是否连通: 例如: 如果ping通了,会出现类似如下的输出: 如果无法ping通,则会出现类似如下的输出: 使用telnet命令测试端口是否开放: 例如: 如果端口开放,则会出现连接成功的信

    2024年02月11日
    浏览(42)
  • 虚拟机修改完ip之后能ping通主机,但不能ping通百度

    ping 主机ip 这样就是通的 进入配置文件查看网关地址是否一致,不一致要进行修改 vim /etc/sysconfig/network-scripts/ifcfg-ens33 然后修改这些东西 BOOTPROTO=static #IP地址 IPADDR=192.168.200.130 #网关 GATEWAY=192.168.200.2 #域名解析器 DNSI=192.168.200.2 在虚拟机上打开虚拟网络编辑器,在编辑里面 在主

    2024年01月23日
    浏览(48)
  • 宿主机无法ping通docker容器IP解决

    安装docker后,发现启动容器的端口8082 映射到宿主机的端口80访问主机没有反应,此时进入容器查看日志,发现并没有请求打进来 现象: 正在连接 localhost (localhost)|::1|:80… 已连接。 已发出 HTTP 请求,正在等待回应… 读取文件头错误 (Connection reset by peer)。 重试中。 1:怀疑容

    2024年02月06日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包