OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2434|回复: 2

UIP如何定时主动ping指定的网络

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-10-19
在线时间
3 小时
发表于 2016-10-19 15:15:01 | 显示全部楼层 |阅读模式
在进ENCJ2860实验室,如何让设备主动去ping一个指定的网络。enc28j60作为服务器192.168.1.26,将电脑作为客户端192.168.1.14
要求enc28j60每个一秒主动发送一次ping回应请求发送给客户端。
现在,自己通过直接写的方式进行,但是用Wireshark软件进行抓包,总是出现错误的信息。Expert Info (Error/Protocol): IPv4 total length exceeds packet length (46 bytes)
下面是代码:
//定时发送
while(ICMP_CNT%200==0)
{
BUF->type = 0x0800;
icmp_process();
uip_arp_out();
tapdev_send();
}

//icmp数据填充
icmp_process(void)
{
BUF->vhl = 0x45;
BUF->tos =0x00;
BUF->len[0]=0x00;
BUF->len[1]=0x3c;
BUF->ipid[0]=0x03;
BUF->ipid[1]=0x16;       
BUF->ipoffset[0]=0x00;
BUF->ipoffset[1]=0x00;
BUF->ttl=0x40;
BUF->proto=0x01;
       
uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
uip_ipaddr(BUF->destipaddr, 192,168,1,14);
BUF->icmpchksum=uip_ipchksum();       

BUF->type=0x08;
BUF->icode=0x00;
       
BUF->id=0x0001;       
BUF->seqno=0x0027;
for(i=0;i<0x77-0x60;i++)       
uip_buf[i+28+ UIP_LLH_LEN]=0x61+i;
for(i=0x77-0x60;i<32;i++)
uip_buf[i+28 + UIP_LLH_LEN]=0x61+i-0x77+0x60;
++uip_stat.icmp.sent;
++uip_stat.ip.sent;
uip_flags = 0;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

254

帖子

0

精华

高级会员

Rank: 4

积分
594
金钱
594
注册时间
2015-10-17
在线时间
145 小时
发表于 2016-10-19 16:03:59 | 显示全部楼层
UDP本身就没有客户端和服务器之分, 只要在UDP的广播范围内的地址都是可以收到的.
开着单片机翱翔在天空
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-10-19
在线时间
3 小时
 楼主| 发表于 2016-10-19 16:46:59 | 显示全部楼层
原_子_哥门徒 发表于 2016-10-19 16:03
UDP本身就没有客户端和服务器之分, 只要在UDP的广播范围内的地址都是可以收到的.

这同UDP没有关系吧。
Ping是ICMP的协议中的一种,不是网络传输层的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 23:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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