uip协议,主动发送功能
生活随笔
收集整理的這篇文章主要介紹了
uip协议,主动发送功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、uip協議,作為服務器
一般情況下,在uip協議作為服務器使用,在while(1)中實現以下代碼,不斷讀取網卡數據,進行處理,然后返回給客戶端。
uip_len = tapdev_read((void *)uip_buf);if(uip_len > 0) /* received packet */{ if(BUF->type == htons(UIP_ETHTYPE_IP)) /* IP packet */{uip_input();if(uip_len > 0){uip_arp_out(); tapdev_send((void *)uip_buf,uip_len);clear_udp_ports(); }}else if(BUF->type == htons(UIP_ETHTYPE_ARP)) /*ARP packet */{//printf("Recv a ARP packet\r\n");uip_arp_arpin(); if(uip_len > 0){tapdev_send((void *)uip_buf,uip_len); /* ARP ack*/}}}else if(timer_expired(&periodic_timer)) /* no packet but periodic_timer time out (0.5s)*/{timer_reset(&periodic_timer);for(i = 0; i < UIP_CONNS; i++){uip_periodic(i);if(uip_len > 0){uip_arp_out();tapdev_send((void *)uip_buf,uip_len);}}#if UIP_UDPfor(i = 0; i < UIP_UDP_CONNS; i++) {uip_udp_periodic(i);if(uip_len > 0) {uip_arp_out();tapdev_send((void *)uip_buf,uip_len);}} #endif /* UIP_UDP *//* Call the ARP timer function every 10 seconds. */if(timer_expired(&arp_timer)){timer_reset(&arp_timer);uip_arp_timer();}}二、uip協議,作為客戶端,主動發送
在網上搜尋了以下,有的利用超時處理,有的加快服務器響應時間來發送,并沒有實現利用uip協議主動發送功能,也就是作為客戶端。仔細看了以下uip處理消息的流程,無非就是收到buf,分解,提取遠端ip,端口,填充buf等操作,要想實現主動發送,必須自己完成后半部分工作,然后利用 網卡直接發送。主要思路如下:
1、設置遠端IP,端口
2、從ARP列表尋找MAC
3、填充BUF
4、網卡發送
5、Demo鏈接
https://download.csdn.net/download/qq_18322543/10458634
總結
以上是生活随笔為你收集整理的uip协议,主动发送功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 稳定性测试JVM内存监控
- 下一篇: 怎样快速调整EDIUS 8中图片可见度