搜索
bottom↓
回复: 3

W5200响应UDP广播包,电脑端为什么接收不到响应?

[复制链接]

出0入0汤圆

发表于 2016-3-17 16:16:43 | 显示全部楼层 |阅读模式
电脑发出UDP广播包,我用Debug模式在线调试,发现能接收到UDP广播包,但向发送广播包的电脑发送UDP包时,电脑端接收不到这个包。
这时的电脑IP与单片机设置的W5200的IP地址不在同一个网段中,比如电脑是172.29.143.143,W5200的IP是192.168.0.145

当把电脑的IP修改成与W5200相同的网段时,即都是192.168.0的网段,这个时候电脑就能接收到W5200发送的UDP响应。

疑问:例如海康威视的设备搜索软件,就可以搜索到不同网段的IP,我这个咋不行呢?
我查看过W5200的数据手册中UDP广播段的说明,程序就是按照上面说的来的。
数据手册中的UDP部分在附件中55页,5.2.2.1 Unicast and Broadcast节。

UDP发送代码:
uint16 sendto(SOCKET s, const uint8 * buf, uint16 len, uint8 * addr, uint16 port)
{
//        uint8 status=0;
//        uint8 isr=0;
        uint16 ret=0;
       
#ifdef __DEF_IINCHIP_DBG__
        printf("sendto()\r\n");
#endif
   if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size.
   else ret = len;

        if
                (
                         ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||
                         ((port == 0x00)) ||(ret == 0)
                )
        {
           /* +2008.01 [bj] : added return value */
           ret = 0;
#ifdef __DEF_IINCHIP_DBG__
        printf("%d Fail[%.2x.%.2x.%.2x.%.2x, %.d, %d]\r\n",s, addr[0], addr[1], addr[2], addr[3] , port, len);
        printf("Fail[invalid ip,port]\r\n");
#endif
        }
        else
        {
                IINCHIP_WRITE(Sn_DIPR0(s),addr[0]);
                IINCHIP_WRITE((Sn_DIPR0(s) + 1),addr[1]);
                IINCHIP_WRITE((Sn_DIPR0(s) + 2),addr[2]);
                IINCHIP_WRITE((Sn_DIPR0(s) + 3),addr[3]);
                IINCHIP_WRITE(Sn_DPORT0(s),(uint8)((port & 0xff00) >> 8));
                IINCHIP_WRITE((Sn_DPORT0(s) + 1),(uint8)(port & 0x00ff));

//                printf("destination Port : %4d\r\n", IINCHIP_READ(Sn_DPORT0(s)));
//                printf("destination IP : %d.%d.%d.%d\r\n", IINCHIP_READ(Sn_DIPR0(s)), IINCHIP_READ(Sn_DIPR0(s) + 1), IINCHIP_READ(Sn_DIPR0(s) + 2), IINCHIP_READ(Sn_DIPR0(s) + 3));
                          
                          
                  // copy data
                send_data_processing(s, (uint8 *)buf, ret);
                IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND);

                /* +20071122[chungs]:wait to process the command... */
                while( IINCHIP_READ(Sn_CR(s)) )
                        ;
        }
        return ret;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2016-3-17 17:03:05 | 显示全部楼层
IP地址多少 好像要设置成255.255.255.255

出0入0汤圆

发表于 2016-3-17 17:04:49 | 显示全部楼层
是目标ip哦  不是本机ip

出0入0汤圆

 楼主| 发表于 2016-3-18 16:55:04 | 显示全部楼层
linyu0395 发表于 2016-3-17 17:03
IP地址多少 好像要设置成255.255.255.255

电脑端发送目标IP设置的就是255.255.255.255

单片机发送函数调用:
sendto(SOCKET_UDP_CLIENT, data_buf, 47, UdpServerIP, udp_destport);
其中的UdpServerIP和udp_destport就是发出UDP包的电脑的IP和端口(读取W5200得到)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-13 12:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表