uip
怎么了解uip
可以看看uip.h。里面有使用函数的说明和例程。
check(uip_len>0 ) 有网络数据后,处理事件。uip_polling定义了这些功能,uip才会有相应的功能。
处理哪些事件。如
UIP_ETHTYPE_IP \ /-> udp_APP 用户程序
UIP_ETHTYPE_ARP |--uip_process核心调用处理---|->tcp_app
定时检测UDP/TCP通讯事件 | |->tcp连接处理
uip_udp_periodic/轮询用户app / \->数据录入
UDP用户代码
初始化
void udp_app_init(void)
{
uip_Ipaddr_t addr;
struct uip_udp_conn *c;
uip_ipaddr(&addr, 192,168,0,132);
c = uip_udp_new(&addr, HTONS(UDP_TEST_PORT)); //remote port
if(c != NULL) {
uip_udp_bind(c, HTONS(UDP_TEST_PORT)); //local port
}
}
------------------------------------------------------------------------------------
void udp_appcall(void)
{
switch(uip_udp_conn->lport)
{
case HTONS(UDP_TEST_PORT):
udp_test_app(uip_appdata);
break;
default:
break;
}
}
BB几句
-
uip里有很多全局变量,用起来有点头大。有时根本不知道他用来干嘛的,几个差不多的变量经常搞混
例如: 1网口的接口代码,也是用的uip_len和uip_buf这种全局变量 void tapdev_send(void) { ENC28J60_Packet_Send(uip_len,uip_buf); } 2 检查网络事件 if(uip_len>0)
-
代码风格也不怎么好
uip_process里还很多goto if(flag == UIP_UDP_SEND_CONN) { goto udp_send; }
UDP使用限制
只能单工模式:发送和接收数据共用一个buff,在接收函数里甚至不能回送接收信息
官方例程unix节选
unsigned int
tapdev_read(void)
{
int ret;
ret = read(fd, uip_buf, UIP_BUFSIZE);
return ret;
}
/*---------------------------------------------------------------------------*/
void tapdev_send(void)
{
int ret;
ret = write(fd, uip_buf, uip_len);
}
void udp_receive_app(char * p)
{
if(uip_newdata())
{
memcpy((char *)udp_send_databuf,uip_appdata,UIP_APPDATA_SIZE);
uip_send(udp_send_databuf,UIP_APPDATA_SIZE);
}
}
这样数据是不会发送出来的,而且发送几条后uip就会停止udp服务
只要不动uip_appdata,这样是可以的(原因我也不清楚,很纳闷,uip还是)
void udp_test_app(char * p)
{
if(uip_newdata())
{
strcpy((char *)udp_send_databuf,"good news \n");
uip_send(udp_send_databuf,11);
//或者直接 uip_send("good news \n",11);
}
}
UDP的接收app里,没有特殊处理,只能发送一条数据。
因为uip_send()只是把数据放入buf,然后通过在uip_polling()中轮询发送。所以连续多条uip_send()时只发送最后那条。如
uip_send("this is a good news! \n",22);
uip_send("this is a bad news! \n",21);
就只发送后面一条
主要函数说明
-
uip_polling()
放在main主循环里的用户函数,通过不同事件调用uip_process()
-
uip_process()
uip_process()都是通过类似定义来引用 #define uip_input() uip_process(UIP_DATA) uip_polling都是通过以下函数来引用uip_process(),包括 uip_input() 接收包处理 uip_periodic(conn) TCP连接周期性处理 uip_periodic_conn(conn) 制定TCP连接处理 uip_poll_conn(conn) 轮询特定连接 uip_udp_periodic(conn) UDP周期性处理 uip_udp_periodic_conn(conn) 特定UDP周期性处理
相关阅读
只需要寻找到适合你的、可以说明你的产品给用户提供价值的指标即可。在Facebook Platform那段时间,那时候这个指标被用来衡量平台
只需要寻找到适合你的、可以说明你的产品给用户提供价值的指标即可。在Facebook Platform那段时间,那时候这个指标被用来衡量平台