新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM7單片機+RTL8019嵌入式TCP_IP協議棧使用分析

        ARM7單片機+RTL8019嵌入式TCP_IP協議棧使用分析

        作者: 時間:2012-12-05 來源:網絡 收藏
        一、總則
        本文件是嵌入式TCP/IP的說明文件,嵌入式TCP/IP應用開發人員可通過閱讀本文件,掌握在嵌入式TCP/IP的基礎上開發服務器和客戶端應用程序,如FTP服務器,WEB服務器,串口服務器等等。
        二、參考文件
        1)TCP_IP詳解卷1,2,3
        2)RFC 959 (rfc959) - File Transfer Protocol.htm
        3)rfc1945- Hypertext Transfer Protocol -- HTTP/1.0
        三、技術說明
        1)用戶應用則需要編寫以太網的數據報收發驅動,就可以使用協議棧提供的標準SOCKET API,完成服務器和客戶端應用程序的開發。
        2)協議棧運行于非操作系統的環境下,因此它的運行速度與一般采用多任務操作系統的TCP/IP協議,速度相對說來要快。
        3)協議棧完成的功能包括ARP,IP,ICMP(ping),TCP,UDP,暫不支持IGMP,RARP。
        4)協議棧采用C代碼編寫,可方便的移植于各種單片機平臺。
        5)協議棧在+硬件環境下測試,并建立了FTP服務器和WEB服務器,性能穩定。
        6)協議棧建立的FTP服務器和WEB服務器與Internet Explorer瀏覽器和ftp.exe相互兼容。
        7)協議棧每一個SOCKET上建了數據緩沖隊列(數據結構),用于接收SOCKET的并發數據,實現多SOCKET的并發數據報處理,可同時運行FTP服務器和WEB服務器。
        8)協議棧實現了ACK的延時答應(200ms),支持TCP多包發送和接收,但未支持TCP數據報的失序處理,因此適合局域網內使用。

        四、SOCKET API函數
        1)函數SOCKET * socket(u16 af,u16 type,u16 protocol)
        本函數功能是從SOCKET pool中分配一個SOCKET插口,供應用程序使用,其參數說明如下:
        1.參數af,type—無意義,保留為擴充功能使用。
        2.參數protocol—為分配SOCKET的類型,包括TCP_PROTOCOL和UDP_PROTOCOL兩個類型。
        3.返回值:函數執行成功,返回SOCKET*指針指向一個SOCKET,失敗返回NULL
        2)函數u16 bind(SOCKET * sock,struct sockaddr * address,u8 len)
        本函數功能是將IP地址和端口綁定到一個SOCKET 指針* sock指向的SOCKET。
        1.SOCKET * sock—指向被綁定的SOCKET。
        2.struct sockaddr * address—指向IP地址和端口。
        3.len—無意義,保留為擴充功能使用。
        4.返回值:SUCC。
        3)函數u16 listen(SOCKET * sock, u16 QTY)
        本函數功能是啟動被綁定了地址和端口的 SOCKET * sock,觸發其為監聽狀態。本函數由服務器端應用程序使用。
        1.SOCKET * sock—指向被bind的SOCKET。
        2.返回值:SUCC。
        4)函數u16 connect(SOCKET * sock, struct sockaddr * sevaddr,u8 len)
        本函數功能是用于建立一個連接,到服務器,服務器的地址和端口由參數sevaddr指定。該函數由客戶端使用。
        1.SOCKET * sock—指向被連接的本地SOCKET。
        2.struct sockaddr * sevaddr,-- 服務器的地址和端口.
        3.u8 len—無意義,保留為擴充功能使用。
        4.返回值:是SOCKET句柄。
        5)函數u16 accept(SOCKET * sock,struct sockaddr * address,u16 *iii)
        本函數返回一個已連接的SOCKET句柄,供函數recv(),send()收發數據使用。
        1.SOCKET * sock—指向一個被綁定地址和端口的SOCKET
        2.struct sockaddr * address,u16 *iii--無意義,保留為擴充功能使用。
        3.返回值:是SOCKET句柄。
        6)函數u16 recv(u16 handle,u8 * rec_buff,u16 len,u16 i)
        指定句柄讀取數據,由TCP使用
        1.u16 handle--指定句柄
        2.u8 * rec_buff—緩沖區首地址
        3.u16 len—讀取數據的長度
        4.u16 i--無意義,保留為擴充功能使用。
        5.返回值:為已讀取的字節數
        7)函數u8 send(u16 handle,u8 *rec_buff,u16 len,u16 i)
        向指定句柄發送數據,由TCP使用
        1.u16 handle--指定句柄
        2.u8 * rec_buff—緩沖區首地址
        3.u16 len—發送數據的長度
        4.u16 i--無意義,保留為擴充功能使用。
        5.返回值:是SUCC
        8)void close(u16 handle)
        發送FIN主動關閉一個SOCKET連接,handle為被關閉連接的句柄。

        9)函數u16 recvfrom(SOCKET *sock,u8 *rec_buff,u16 len,u8 i,struct sockaddr * address,u16 *addr_len)
        從指定SOCKET *sock插口讀取數據,由UDP使用,函數的參數具體情況如下:
        1.SOCKET *sock --指向插口的指針
        2.u8 * rec_buff—緩沖區首地址
        3.u16 len—讀取數據的長度
        4.u16 i--無意義,保留為擴充功能使用。
        5.返回值:為已讀取的字節數

        10)函數u16 sendto(SOCKET *sock,u8 *rec_buff,u16 len,u8 i,struct sockaddr * address,u16 *addr_len)
        向從指定SOCKET *sock插口發送數據,由UDP使用,函數的參數具體情況如下:
        1.SOCKET *sock,--指向插口的指針
        2.u8 * rec_buff—緩沖區首地址
        3.u16 len—發送數據的長度
        4.u16 i--無意義,保留為擴充功能使用
        5.返回值:為SUCC

        五、SOCKET API應用舉例
        1)簡單WEB服務器--通過函數TCP_TEST()完成設置本地TCP服備器的IP地址,其過程如下:
        1.調用SOCKET API函數socket(0,0,TCP_PROTOCOL)分配一個SOCKET,
        2.調用SOCKET API函數將TCP server的IP地址與SOCKET綁定,調用函數bind()起動監聽。
        3.函數TCP_TEST()通過函數accept()接收網頁獲取請求,調用函數recv()接收HTTP命令,根據命令調用函數send()發送http網頁。

        單片機相關文章:單片機教程


        單片機相關文章:單片機視頻教程


        單片機相關文章:單片機工作原理


        tcp/ip相關文章:tcp/ip是什么



        上一頁 1 2 下一頁

        關鍵詞: ARM7 RTL8019 協議棧

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 孝昌县| 盘山县| 汉中市| 苍梧县| 始兴县| 鄱阳县| 邳州市| 六枝特区| 宝应县| 阳江市| 苗栗县| 大名县| 上杭县| 博罗县| 渭源县| 石屏县| 永平县| 云阳县| 靖边县| 隆安县| 柘荣县| 安图县| 阿鲁科尔沁旗| 仁化县| 安丘市| 讷河市| 湾仔区| 紫阳县| 岳阳县| 台安县| 永德县| 鄂尔多斯市| 康平县| 齐河县| 元朗区| 昌黎县| 双城市| 天台县| 郎溪县| 沅陵县| 平江县|