在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 汽車電子 > 設(shè)計(jì)應(yīng)用 > 基于GPRS的車輛監(jiān)控系統(tǒng)技術(shù)研究

            基于GPRS的車輛監(jiān)控系統(tǒng)技術(shù)研究

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

            CP和UDP協(xié)議同在傳輸層,由于本系統(tǒng)每次傳輸?shù)臄?shù)據(jù)量小而且突發(fā)性強(qiáng),所以采用UDP協(xié)議傳輸數(shù)據(jù)。UDP協(xié)議的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流壓縮成數(shù)據(jù)報(bào)的形式。一個(gè)典型的數(shù)據(jù)報(bào)就是一個(gè)二進(jìn)制數(shù)據(jù)的傳輸單位。UDP協(xié)議為不可靠的傳輸協(xié)議,不提供數(shù)據(jù)傳送的保障機(jī)制。如果在從發(fā)送方到接收方的傳遞過程中出現(xiàn)數(shù)據(jù)報(bào)的丟失,協(xié)議本身并不能做出任何檢測(cè)或提示。因此,必須在應(yīng)用層的協(xié)議中添加保障信息傳輸可靠性的確認(rèn)機(jī)制。監(jiān)控中心向終端下傳數(shù)據(jù)時(shí),要求終端返回接收正確或錯(cuò)誤的確認(rèn)信息,監(jiān)控中心收到正確的確認(rèn)信息后數(shù)據(jù)下傳進(jìn)程才完畢。否則,監(jiān)控中心將在規(guī)定的時(shí)間內(nèi)重發(fā),直到收到正確的確認(rèn)信息或發(fā)送次數(shù)標(biāo)志溢出才終止。
            網(wǎng)絡(luò)UDP端口資源十分緊缺,變化很快;UDP由于自身特點(diǎn),以及網(wǎng)絡(luò)UDP端口資源的有限性,在一段時(shí)間沒有數(shù)據(jù)流量后,端口容易改變,產(chǎn)生的影響就是從服務(wù)器中心端向終端發(fā)送數(shù)據(jù),GPRS終端接收不到。原因是移動(dòng)網(wǎng)關(guān)從中做了中轉(zhuǎn),需要隔一定時(shí)間給主機(jī)發(fā)UDP包來維持該IP和端口號(hào),這樣主機(jī)就能主動(dòng)給GPRS發(fā)UDP包,筆者在測(cè)試中發(fā)現(xiàn),這個(gè)間隔時(shí)間很短,約1 min發(fā)一次UDP包才能夠維持,再長(zhǎng)時(shí)間移動(dòng)網(wǎng)關(guān)那邊就要丟失這個(gè)端口了,逾期主機(jī)想主動(dòng)發(fā)數(shù)據(jù)給終端,將無法送達(dá)。只有GPRS終端設(shè)備重新發(fā)一個(gè)UDP包過去,移動(dòng)再分配一個(gè)中轉(zhuǎn)IP和端口,才能夠進(jìn)行雙向通信。為保證端口有效性和數(shù)據(jù)實(shí)時(shí)性,終端設(shè)備每5 s發(fā)送一條包含定位和狀態(tài)的數(shù)據(jù)給服務(wù)器。
            2.2 基于C#發(fā)送、接收UDP數(shù)據(jù)包使用的主要方法
            (1)UDP數(shù)據(jù)類。用Visual C#實(shí)現(xiàn)UDP協(xié)議,最為常用,也是最為關(guān)鍵的類就是UdpClient,UdpClient位于命名空間System.Net.Sock ets中,Visual C#發(fā)送、接收UDP數(shù)據(jù)包都是通過UdpClient類的。UdpClient類主要有以下幾個(gè)方法,見表1。

            本文引用地址:http://www.biyoush.com/article/197032.htm

            b.jpg


            (2)接受終端UDP數(shù)據(jù)。接收UDP數(shù)據(jù)包使用的是UdpClient中的“Receive”方法。此方法的調(diào)用語法如下:public byte[]Receive(ref IPEndPoint remoteEP);參數(shù)remoteEP是一個(gè)IPEndPoint類的實(shí)例,它表示網(wǎng)絡(luò)中發(fā)送此數(shù)據(jù)包的節(jié)點(diǎn)。下面就是通過偵聽本地端口號(hào)“8 080”來獲取信息代碼:
            UdpClient server=new UdpClient(8080);
            IPEndPoint receivePoint=new IPEndPoint(IPAddress.Any,0);
            byte[]recData=server.Receive(ref receivePoint);
            recData就是接受到的UDP報(bào)文,其中UDP包頭結(jié)構(gòu)如下:源端口16位,目的端口16位,長(zhǎng)度16位,校驗(yàn)和16位;上文中闡述了GPRS的UDP端口非常緊缺,隨時(shí)會(huì)變化,在每次接受到UDP報(bào)文后,必須記錄源端口、IP地址。receivePoint參數(shù)是引用類型,receive到新的UDP后,receivePoint對(duì)象的address和port屬性值就是發(fā)送源的IP地址和端口。這個(gè)IP和端口未必是真的終端的IP和端口。因?yàn)榻K端上的應(yīng)用程序綁定本地一個(gè)端口(比如是9002),通過這個(gè)端口發(fā)送請(qǐng)求給路由器,路由器由此記錄下終端的內(nèi)網(wǎng)IP和端口(9002),然后路由器分配自己的一個(gè)空閑端口(比如是7000),通過這個(gè)端口(7000)發(fā)送請(qǐng)求給監(jiān)控中心。而對(duì)于監(jiān)控中心,它沒有任何關(guān)于終端的信息,它要做的只是回信息到路由器的外網(wǎng)IP的7000這個(gè)端口。路由器收到發(fā)送到其7000端口的數(shù)據(jù)后會(huì)再轉(zhuǎn)發(fā)給終端。
            (3)發(fā)送UDP數(shù)據(jù)報(bào)。發(fā)送UDP數(shù)據(jù)報(bào)使用“Send”方法。“Send”方法的調(diào)用語法如下:public int Send(byte[]dgram,int bytes,IPEndPoint endPoint);參數(shù)說明:dgram要發(fā)送的UDP數(shù)據(jù)文報(bào)(以字節(jié)數(shù)組表示)。bytes數(shù)據(jù)文報(bào)中的字節(jié)數(shù)。endPoint一個(gè)IPEndPoint,它表示要將數(shù)據(jù)文報(bào)發(fā)送到的主機(jī)和端口。返回值是已發(fā)送的字節(jié)數(shù)。下面使用UDPClient發(fā)送UDP數(shù)據(jù)包的具體的調(diào)用例子:
            c.jpg
            該代碼實(shí)現(xiàn)了對(duì)某終端發(fā)送UDP報(bào)文后的回復(fù)。如果需要主動(dòng)向終端發(fā)送報(bào)文則需要從數(shù)據(jù)庫中提取該終端最近一次的IP和端口號(hào),調(diào)用該方法發(fā)送內(nèi)容。
            2.3 數(shù)據(jù)封裝和轉(zhuǎn)存
            監(jiān)控中心與客戶端的數(shù)據(jù)通信包含2種:一種是上行數(shù)據(jù),一種是下行數(shù)據(jù)。上行數(shù)據(jù)包含終端匯報(bào)車輛的狀態(tài)信息,車輛實(shí)時(shí)信息,車輛語音信息,視頻信息等。下行信息包含對(duì)終端的回應(yīng),車輛的實(shí)時(shí)控制等信息。數(shù)據(jù)種類大約一百多種,可分為20多種格式。針對(duì)每種格式定義一個(gè)結(jié)構(gòu)進(jìn)行數(shù)據(jù)接受和轉(zhuǎn)存到數(shù)據(jù)庫,進(jìn)行數(shù)據(jù)顯示和分析。終端返回?cái)?shù)據(jù)一般是結(jié)構(gòu)類型,為保證數(shù)據(jù)轉(zhuǎn)換準(zhǔn)確和便捷,C#也使用同樣的結(jié)構(gòu)對(duì)數(shù)據(jù)進(jìn)行接受。上文中UDP報(bào)文接受到的正文是byte類型,該byte內(nèi)容有報(bào)文頭和報(bào)文類型、校驗(yàn)部分和正文構(gòu)成。根據(jù)報(bào)文類型找到對(duì)應(yīng)的C#結(jié)構(gòu)體structType。利用Marshal.SizeOf(structType);獲取結(jié)構(gòu)體大小,并進(jìn)行分配空間:IntPtrstructPtr=Marsh al.AllocHGlobal(size);然后將byte數(shù)組拷到分配好的內(nèi)存空間:Marshal.Copy(recData,0,structPtr,size);將內(nèi)存空間轉(zhuǎn)換為目標(biāo)結(jié)構(gòu)體objectobj=Marshal.PtrToStructure(structPtr. struct Type)。為提高系統(tǒng)的實(shí)時(shí)響應(yīng)速度,這些數(shù)據(jù)分為2種處理方式,如非緊急數(shù)據(jù)直接保存到數(shù)據(jù)庫,而如果是緊急數(shù)據(jù),比如車輛報(bào)警數(shù)據(jù),車輛控制數(shù)據(jù)則直接通過Socket連接發(fā)送到Web服務(wù)器,由Web服務(wù)器推送到瀏覽器監(jiān)控端。

            3 結(jié)語
            本文主要分析了監(jiān)控系統(tǒng)的GPRS通信技術(shù),詳細(xì)介紹了基于GPRS的UDP數(shù)據(jù)通信流程和方法,實(shí)現(xiàn)了C#環(huán)境下接受,發(fā)送UDP數(shù)據(jù)報(bào)文,協(xié)議的定制,數(shù)據(jù)轉(zhuǎn)存等關(guān)鍵技術(shù)。本文解決的問題是監(jiān)控系統(tǒng)的核心內(nèi)容,但并不是全部,一個(gè)完整的系統(tǒng)還應(yīng)包括終端硬件設(shè)計(jì)以及后臺(tái)監(jiān)控軟件、GIS地圖顯示等許多方面。今后,應(yīng)通過進(jìn)一步的研究。解決系統(tǒng)其他相關(guān)技術(shù)。


            上一頁 1 2 下一頁

            評(píng)論


            相關(guān)推薦

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

            關(guān)閉