阴世幽泉 发表于 2021-10-9 15:23:17

W5500接收udp广播数据

最近使用w5500做测试,配置为udp客户端,向255.255.255.255,端口号为4000发送数据,socket工具可以监听到广播包;但是配置为udp服务器接收广播包时候(端口号为4001),
在socket tool中配置远端ip为255.255.255.255,端口号为4001,服务器却收不到广播数据包,请问各位大神,有谁会知道这个问题怎么处理不?
以下是udp服务端代码:
int32_t do_udps(uint8_t sn, uint8_t* buf, uint16_t port)
{
   int32_tret;
   uint16_t size, sentsize;
   uint8_tdestip;
   uint16_t destport;

   switch(getSn_SR(sn))
   {
      case SOCK_UDP :
         if((size = getSn_RX_RSR(sn)) > 0)
         {
            if(size > UDPSERVER_BUF_SIZE) size = UDPSERVER_BUF_SIZE;
            ret = recvfrom(sn, buf, size, destip, (uint16_t*)&destport);
            if(ret <= 0)
            {
#ifdef _LOOPBACK_DEBUG_
               printf("%d: recvfrom error. %ld\r\n",sn,ret);
#endif
               return ret;
            }
            size = (uint16_t) ret;
            sentsize = 0;
            RevSetIPmsgFlag = 1;
            printf("UDP 收到数据\r\n");
            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, port, 0x00)) != sn)
            return ret;
#ifdef _LOOPBACK_DEBUG_
         printf("%d:Opened, UDP loopback, port [%d]\r\n", sn, port);
#endif
         break;
      default :
         break;
   }
   return 1;
}

eric2013 发表于 2021-10-9 15:57:19

W5500有办法有什么寄存器可以查询接到数据了不。

阴世幽泉 发表于 2021-10-9 16:35:06

eric2013 发表于 2021-10-9 15:57
W5500有办法有什么寄存器可以查询接到数据了不。

getSn_RX_RSR(sn))函数就是判断读取socket端口接收寄存器的

eric2013 发表于 2021-10-9 17:05:30

阴世幽泉 发表于 2021-10-9 16:35
getSn_RX_RSR(sn))函数就是判断读取socket端口接收寄存器的

局域网内其它电脑也开个网络助手,看看正常不,如果正常,那确实是5500的问题了。

阴世幽泉 发表于 2021-10-9 19:35:46

eric2013 发表于 2021-10-9 17:05
局域网内其它电脑也开个网络助手,看看正常不,如果正常,那确实是5500的问题了。

找到原因了,就是socket tool工具原因,我用抓包工具,在同一台电脑上各开一个udp客户端和服务器,结果发现广播的数据抓不到,广播的数据包应该是回环了没有经过路由器,我让朋友做了小软件测试验证,这下就可以抓到数据包了,同时板子也可以收到广播数据;

eric2013 发表于 2021-10-10 09:43:41

阴世幽泉 发表于 2021-10-9 19:35
找到原因了,就是socket tool工具原因,我用抓包工具,在同一台电脑上各开一个udp客户端和服务器,结果发 ...

谢谢告知最终原因,看来排查下网络助手很有必要。
页: [1]
查看完整版本: W5500接收udp广播数据