lwip協議棧學習---udp


書籍:《嵌入式網絡那些事-lwip協議》

udp協議的優點:

      1)基於IP協議,無連接的用戶數據報協議,適用於傳送大批量數據,

      2)實時性比較高,適用於嵌入式網絡

     

發送函數:udp_send    udp_sendto 兩個函數都可以用來發送報文,后者指定發送的目的ip地址,前者需要通過與ip層交互,獲取有效的ip地址,然后調用后者完成數據的發送。

udp_sendto通過調用函數udp_sendto_if完成報文的組裝和發送,在調用udp_sendto_if之前,與IP層進行交互操作,機調用ip_route為報文尋找一個網絡接口結構,這個結構記錄了整個系統的有效IP地址

 

報文接收函數

     udp_input被調用處理報文,主要進行報文合法性檢測,根據報文端口信息查找匹配的UDP控制塊,並把報文數據遞交給控制塊中注冊的用戶自定義函數處理。

 

udp編程接口,采用回調函數的方式,優點-編程簡單,只需要綁定對應IP和端口后,編寫自己的處理函數,然后通過udp_recv函數注冊用戶的回調函數。不過采用回調方式編程存在缺陷,用戶應用程序和協議棧內核處於同一進程中,用戶程序通過回調的方式執行,在用戶程序執行的過程中,內核進程處於阻塞狀態,如果用戶程序比較大,處理時間較長,協議棧內核代碼得不到執行,協議棧接收,處理新數據包效率會受到直接的影響。最嚴重的后果,如果發送方的數據包發送速率很快,協議棧會因為來不及處理而出現丟包的情況。

/**************************************************************************/

   回調方式編程的基本框架:

 系統時鍾更新

SystemCoreClockUpdate();

 初始化mac層,

Chip_ENET_Init(LPC_ETHERNET);

 使能系統滴答定時器

SysTick_Enable(1);

 初始化lwip協議棧

lwip_init();

 初始化本機ip

 IP4_ADDR(&gw, 192,168,1,1);//網關地址
 IP4_ADDR(&ipaddr, 192,168,1,37);//本機IP地址
 IP4_ADDR(&netmask, 255, 255, 255, 0);//子網掩碼

注冊網絡接口

netif_add(&lpc_netif, &ipaddr, &netmask, &gw, NULL, lpc_enetif_init,ethernet_input);
 netif_set_default(&lpc_netif);
 netif_set_up(&lpc_netif);

啟動DHCP功能

dhcp_start(&lpc_netif);

申請一個UDP控制塊

upcb = udp_new();

綁定到本地端口
 udp_bind(upcb,IP_ADDR_ANY,UDP_ECHO_PORT);

注冊用戶報文處理函數
 udp_recv(upcb,udp_demo_callback,NULL);

 

 

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM