ch32v307vct6 使用 IPRaw_PING 例程的问题
  1. 使用 IPRaw_PING 例程

  2. 电脑的地址  192.168.1.190        , 设备地址  192.168.1.200


    u8 IPAddr[4]   = {192, 168, 1, 200};             //IP address

    u8 GWIPAddr[4] = {192, 168, 1, 1};              //Gateway IP address

    u8 IPMask[4]   = {255, 255, 255, 0};            //subnet mask

    u8 DESIP[4]    = {192, 168, 1, 190};            //destination IP address

  3. 使用上述配置  电脑 ping 设备正常    设备 ping 电脑也正常


  4. u8 IPAddr[4]   = {192, 168, 1, 200};             //IP address

  5. u8 GWIPAddr[4] = {192, 168, 1, 1};              //Gateway IP address

  6. u8 IPMask[4]   = {255, 255, 255, 0};            //subnet mask

  7. u8 DESIP[4]    = {192, 168, 2, 190};            //destination IP address

  8. 使用上述配置 电脑ping 设备不正常(这里应该要能ping通) 设备 ping 电脑不通(这里对的) 都是 time out ,

    ffe3892c3c7ee00036336be0b9b3aa9.png

您好,IPRaw_PING例程只是演示如何主动ping的demo程序,当iprawsocket置1后,协议栈就不再处理关于ping的包,且代码逻辑为只应答DESIP的ping包,所以即使您的电脑和板子在同一网段,但ip不是DESIP,那也不会回复ping包,所以无法ping通,这部分代码需要您自己实现的。


代码里没看到有哪里处理 判断DESIP的地方, 能方便再详细的指导一下吗?用的 Netlib库,这个协议栈不是封装好的吗,外部好像也没办法处理吧


您好,因为处理的数据是通过socket来接收的,创建socket的目标ip为DESIP,所以不会处理别的ip发的ping包,当netconfig.h中WCHNET_NUM_IPRAW数量设置为1时,协议栈不会再处理ping包,而是交由应用层,对于非目标ip的ping包

处理,需要客户自己实现,若想使用协议栈的ping包处理机制,可以使用TCP等例程或将WCHNET_NUM_IPRAW清0

image.png

image.png



只有登录才能回复,可以选择微信账号登录