[mw_shl_code=c,true] uip_len = tapdev_read(); //从网络设备读取一个IP包,返回数据长度
if(uip_len > 0) //收到数据
{
/* 处理IP数据包(只有校验通过的IP包才会被接收) */
if(BUF->type == htons(UIP_ETHTYPE_IP)) //是IP包吗?
{
uip_arp_ipin(); //去除以太网头结构,更新ARP表
uip_input(); //IP包处理
/*
当上面的函数执行后,如果需要发送数据,则全局变量 uip_len > 0
需要发送的数据在uip_buf, 长度是uip_len (这是2个全局变量)
*/
if (uip_len > 0) //有带外回应数据
{
uip_arp_out(); //加以太网头结构,在主动连接时可能要构造ARP请求
tapdev_send(); //发送数据到以太网(设备驱动程序)
}
}
/* 处理arp报文 */
else if (BUF->type == htons(UIP_ETHTYPE_ARP)) //是ARP请求包
{
uip_arp_arpin(); //如是是ARP回应,更新ARP表;如果是请求,构造回应数据包
/*
当上面的函数执行后,如果需要发送数据,则全局变量 uip_len > 0
需要发送的数据在uip_buf, 长度是uip_len (这是2个全局变量)
*/
if (uip_len > 0) //是ARP请求,要发送回应
{
tapdev_send(); //发ARP回应到以太网上
}
}
}
}[/mw_shl_code]
1 . uip_len = tapdev_read(); //从网络设备读取一个IP包,返回数据长度
这里到底指的是从以太网读数据到stm32,还是指的是从程序里面给定数据读到ENC28j6上面?
如果是把数据读到ENC28J60端口上面,然后在调用后面的?那么我从PC端发送的数据又是从哪里接收的?
2. 回调函数最终是在uip_input()里面被调用的吗?是不是也可以不要回调函数?
3. 如果仅仅用到UDP可以吗?
4. 若UDP配置成功后,是不是两者(电脑和板子)可以相互发数据,接数据?
谢谢!
(新手,莫怪!)
|