[mw_shl_code=c,true]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();//发送数据到以太网
}
}else if (BUF->type==htons(UIP_ETHTYPE_ARP))//处理arp报文,是否是ARP请求包?
{
uip_arp_arpin();
//当上面的函数执行后,如果需要发送数据,则全局变量uip_len>0
//需要发送的数据在uip_buf, 长度是uip_len(这是2个全局变量)
if(uip_len>0)tapdev_send();//需要发送数据,则通过tapdev_send发送
}
}[/mw_shl_code]
[mw_shl_code=c,true] uip_ipaddr(ipaddr, 192,168,100,216); //设置本地设置IP地址
uip_sethostaddr(ipaddr);
uip_ipaddr(ipaddr, 192,168,100,1); //设置网关IP地址(其实就是你路由器的IP地址)
uip_setdraddr(ipaddr);
uip_ipaddr(ipaddr, 255,255,255,0); //设置网络掩码
uip_setnetmask(ipaddr);[/mw_shl_code]
[mw_shl_code=c,true]//这里我们假定Server端的IP地址为:192.168.1.103
//这个IP必须根据Server端的IP修改.
//尝试重新连接
void tcp_client_reconnect()
{
uip_ipaddr_t ipaddr;
uip_ipaddr(&ipaddr,182,254,132,112); //设置IP为192.168.1.103
uip_connect(&ipaddr,htons(5555)); //端口为1400
}[/mw_shl_code]
电脑作为服务器和模块连接时可以 |