在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于SX單片機(jī)實(shí)現(xiàn)WebServer和網(wǎng)絡(luò)協(xié)議棧

            基于SX單片機(jī)實(shí)現(xiàn)WebServer和網(wǎng)絡(luò)協(xié)議棧

            作者: 時(shí)間:2012-03-14 來(lái)源:網(wǎng)絡(luò) 收藏

            TCP棧支持同時(shí)建立兩個(gè)TCP連接:一個(gè)為主動(dòng)連接,由TCPApp1Init()來(lái)控制;另一個(gè)為被動(dòng)連接,由TCPApp2Init()來(lái)控制。TCP是連接的,因?yàn)楸仨毐3謱?duì)TCP連接狀態(tài)的監(jiān)視和狀態(tài)有關(guān)的信息保存在發(fā)送控制塊中;而TCP連接狀態(tài)的改變由TCP的軟件狀態(tài)機(jī)來(lái)。軟件狀態(tài)機(jī)又由事件或用戶來(lái)觸發(fā)。比如,當(dāng)監(jiān)視到一個(gè)帶有SYN標(biāo)志的TCP包到達(dá)時(shí),狀態(tài)機(jī)就將TCP連接轉(zhuǎn)換到接收狀態(tài);用戶也可以手工控制狀態(tài)機(jī)處于發(fā)送狀態(tài)來(lái)建立TCP連接。

            ① 用TCP API來(lái)建立TCP被動(dòng)連接

            _TCPApp2Init
            _bank TCB2_BANK
            mov tcb2LocalPortLSB, #HTTP_PORT_LSB ;  設(shè)置TCP的服務(wù)端口
            mov tcb2LocalPortMSB, #HTTP_PORT_MSB
            bank HTTP_BANK
            clr httpParseState
            clr httpURIHash
            setb flags2.TCP_SOCK ;  顯示TCP2的連接狀態(tài)
            jmp @TCPAppPassiveOpen ;  跳轉(zhuǎn)到TCP被動(dòng)連接子程序,進(jìn)行端口偵聽
            retp

            ② 用TCP API建立TCP主動(dòng)連接
            _TCPApp1Init
            test switch ;  條件觸發(fā)
            sz
            retp ;  沒有觸發(fā),退出
            _bank HTTP_BANK
            mov w, #HTTP_CONNECT ;  啟動(dòng)HTTP狀態(tài)機(jī)
            mov httpState, w
            _bank TCB1_BANK
            mov tcb1LocalPortLSB, #80 ;  設(shè)置本機(jī)TCP連接服務(wù)端口
            mov tcb1LocalPortMSB, #80
            mov tcb1RemotePortLSB, #HTTP_PORT_LSB ;  設(shè)置遠(yuǎn)程主機(jī)TCP連接服務(wù)端口
            mov tcb1RemotePortMSB, #HTTP_PORT_MSB
            _bank TCPSOCKET_BANK
            mov sock1RemoteIP3,#SMTP_SERVER_IP3 ;  設(shè)置遠(yuǎn)程主機(jī)的IP地址
            mov sock1RemoteIP2,#SMTP_SERVER_IP2
            mov sock1RemoteIP1,#SMTP_SERVER_IP1
            mov sock1RemoteIP0,#SMTP_SERVER_IP0
            clrb flags2.TCP_SOCK ;  顯示TCP主動(dòng)連接的狀態(tài)
            jmp @TCPAppActiveOpen ;  在指定的端口建立TCP連接
            retp

            ③ 用TCP API發(fā)送數(shù)據(jù)和接收數(shù)據(jù)

            一旦建立了TCP連接,那就只有兩種情況:發(fā)送數(shù)據(jù)或接收數(shù)據(jù)。接收數(shù)據(jù)時(shí),從IP層來(lái)的數(shù)據(jù)經(jīng)過(guò)狀態(tài)機(jī)去掉TCP包頭后再送到應(yīng)用層;發(fā)送數(shù)據(jù)時(shí),軟件狀態(tài)機(jī)會(huì)在數(shù)據(jù)前面加上TCP包頭再發(fā)送到IP層。

            接收數(shù)據(jù)時(shí),需要用到的TCP API函數(shù)為TCPAppRxBytes()、TCPAppRxData()和TCPAppRxDone();發(fā)送數(shù)據(jù)時(shí),有一點(diǎn)值得關(guān)注:為了防止接收緩沖區(qū)的溢出,相對(duì)于發(fā)送數(shù)據(jù)包,棧給予接收數(shù)據(jù)包以更高的優(yōu)先級(jí)。也就是說(shuō),協(xié)議棧軟件會(huì)一直處理接收的數(shù)據(jù)包,直到接收緩沖區(qū)中沒有任何數(shù)據(jù)。

            發(fā)送數(shù)據(jù)時(shí),需要用到的TCP API函數(shù)為TCPAppTxBytes()、TCPAppTxData()和TCPAppTxDone()。必須注意,只有在建立了TCP連接后,才可以發(fā)送數(shù)據(jù)。
             
            3. 應(yīng)用層

            HTTP是WWW上的協(xié)議。當(dāng)用戶要瀏覽服務(wù)器上的一個(gè)網(wǎng)頁(yè)時(shí),一個(gè)HTTP 請(qǐng)求就會(huì)從用戶的瀏覽器發(fā)到HTTP服務(wù)器。服務(wù)器響應(yīng)這個(gè)請(qǐng)求,把指定的網(wǎng)頁(yè)傳送回來(lái),用戶才看到了網(wǎng)頁(yè)。

            下面是一個(gè)典型的客戶端向服務(wù)器發(fā)送請(qǐng)求的例子:

            GET Destination_IP/index.html http/1.0

            GET代表客戶端的請(qǐng)求命令,而服務(wù)器也受理這個(gè)命令;

            Destination_IP代表遠(yuǎn)程主機(jī)的IP地址;index.html是客戶端請(qǐng)求的資源;

            http/1.0是HTTP協(xié)議的版本。



            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉