uip协议,主动发送功能
生活随笔
收集整理的這篇文章主要介紹了
uip协议,主动发送功能
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、uip協(xié)議,作為服務(wù)器
一般情況下,在uip協(xié)議作為服務(wù)器使用,在while(1)中實(shí)現(xiàn)以下代碼,不斷讀取網(wǎng)卡數(shù)據(jù),進(jìn)行處理,然后返回給客戶端。
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協(xié)議,作為客戶端,主動(dòng)發(fā)送
在網(wǎng)上搜尋了以下,有的利用超時(shí)處理,有的加快服務(wù)器響應(yīng)時(shí)間來(lái)發(fā)送,并沒(méi)有實(shí)現(xiàn)利用uip協(xié)議主動(dòng)發(fā)送功能,也就是作為客戶端。仔細(xì)看了以下uip處理消息的流程,無(wú)非就是收到buf,分解,提取遠(yuǎn)端ip,端口,填充buf等操作,要想實(shí)現(xiàn)主動(dòng)發(fā)送,必須自己完成后半部分工作,然后利用 網(wǎng)卡直接發(fā)送。主要思路如下:
1、設(shè)置遠(yuǎn)端IP,端口
2、從ARP列表尋找MAC
3、填充BUF
4、網(wǎng)卡發(fā)送
5、Demo鏈接
https://download.csdn.net/download/qq_18322543/10458634
總結(jié)
以上是生活随笔為你收集整理的uip协议,主动发送功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 稳定性测试JVM内存监控
- 下一篇: 怎样快速调整EDIUS 8中图片可见度