摘 要::LWIP是一款應用與嵌入式領域的開源TCP/IP協議棧。在學習代碼實現中,學生遇到的第一個大問題就是tcp_write函數,解釋了tcp_write函數背后的工作機理。
關鍵詞:LWIP;tcp_write函數;工作機理
在一個簡單的TCP服務器實現代碼中,
1.pcb=tcp_new();/*建立TCP控制塊(pcb) */
2.tcp_bind(pcb,IP_ADDR_ANY,80);/*綁定IP和端口號*/
3.pcb=tcp_listen(pcb);/*進入監聽狀態*/
4.tcp_accept(pcb,http_accept);/*設置回調函數*/
在tcp_accept中調用了tcp_recv函數。
5.tcp_recv(pcb,http_recv);/*設置回調函數*/
在http_recv中調用了tcp_write函數。
6.tcp_write[pcb,http_html_hdr,sizeof(http_html_hdr),0];
/*發送http協議頭部信息*/
7.tcp_write[pcb,login,sizeof(login),0];
/*發送登錄網頁信息*/
在tcp_write中只是調用了tcp_enqueue函數,構造一個報文
段并放在控制塊緩沖隊列中,并沒有立即發送,而是等待數據集中一下然后再發送。那發送是在哪句代碼中體現呢?在網絡上和書本上,都無法找到明確的解釋。
在main函數中調用了LwIP_Periodic_Handle函數,在這個函數中調用了tcp_tmr函數,內部又調用了tcp_slowtmr函數,在這個函數中調用了tcp_output函數。而tcp_output就是發送代碼的函數,問題也得以解決。
本文對簡單的TCP服務器代碼進行分析,解決了tcp_write函數與發送數據之間關系的困惑。
參考文獻:
[1]朱升林.嵌入式Linux網絡那些事[M].北京:中國水利水電出版社,2012-09.
[2]劉光然.零基礎arm裸板編程入門.湖北經濟學院學報:人文社會科學版,2013-02.
(作者單位 湖北省武漢市經濟學院電子工程系)