UDP協(xié)議的ARM、X86平臺之間的通訊方案_第1頁
UDP協(xié)議的ARM、X86平臺之間的通訊方案_第2頁
UDP協(xié)議的ARM、X86平臺之間的通訊方案_第3頁
UDP協(xié)議的ARM、X86平臺之間的通訊方案_第4頁
UDP協(xié)議的ARM、X86平臺之間的通訊方案_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、【W(wǎng)ord版本下載可任意編輯】 UDP協(xié)議的ARM、X86平臺之間的通訊方案 導讀:本文介紹了通過,首先在觸摸屏開展畫圖,使其在液晶屏上顯示,同時通過網(wǎng)絡(luò)傳輸數(shù)據(jù),使其在計算機屏幕上顯示,并由計算機控制去除液晶屏上的圖形,實現(xiàn)了基于UDP協(xié)議的ARM、X86平臺之間的通訊,從而提出了基于UDP協(xié)議的ARM與其它平臺之間通訊的解決方案。 0 引言 隨著人工智能的應用,ARM產(chǎn)品已經(jīng)遍布到各個領(lǐng)域:工業(yè)控制、無線通訊領(lǐng)域、消費類電子產(chǎn)品、成像和安全產(chǎn)品,包括現(xiàn)在流行的數(shù)碼相機和打印機中絕大部分采用ARM技術(shù),手機中的32位SIM智能卡也采用了ARM技術(shù)。除此以外,ARM微處理器及技術(shù)還應用到許多不

2、同的領(lǐng)域,并會在將來取得更加廣泛的應用,因此,ARM與其它平臺之間通訊就顯得尤為重要。 1.UDP協(xié)議本質(zhì) UDP協(xié)議是英文User Datagram Protocol的縮寫,即用戶數(shù)據(jù)報協(xié)議,主要用來支持那些需要在計算機之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應用。包括網(wǎng)絡(luò)視頻會議系統(tǒng)在內(nèi)的眾多客戶/服務器模式的網(wǎng)絡(luò)應用都需要使用UDP協(xié)議。UDP協(xié)議從問世至今已經(jīng)被使用了很多年,雖然其初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但即使是在今天,UDP仍然不失為一項非常實用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。 UDP協(xié)議使用端口號為不同的應用保存其各自的數(shù)據(jù)傳輸通道。UDP和TCP協(xié)議正是采用這一機制實現(xiàn)對同一時刻內(nèi)多項應用同時發(fā)送和

3、接收數(shù)據(jù)的支持。數(shù)據(jù)發(fā)送一方(可以是客戶端或服務器端)將UDP數(shù)據(jù)報通過源端口發(fā)送出去,而數(shù)據(jù)接收一方則通過目標端口接收數(shù)據(jù)。有的網(wǎng)絡(luò)應用只能使用預先為其預留或注冊的靜態(tài)端口;而另外一些網(wǎng)絡(luò)應用則可以使用未被注冊的動態(tài)端口。因為UDP報頭使用兩個字節(jié)存放端口號,所以端口號的有效范圍是從0到65535.一般來說,大于49151的端口號都代表動態(tài)端口。 數(shù)據(jù)報的長度是指包括報頭和數(shù)據(jù)部分在內(nèi)的總的字節(jié)數(shù)。因為報頭的長度是固定的,所以該域主要被用來計算可變長度的數(shù)據(jù)部分(又稱為數(shù)據(jù)負載)。數(shù)據(jù)報的長度根據(jù)工作環(huán)境的不同而各異。從理論上說,包含報頭在內(nèi)的數(shù)據(jù)報的長度為65535字節(jié)。不過,一些實際應用

4、往往會限制數(shù)據(jù)報的大小,有時會降低到8192字節(jié)。 UDP協(xié)議使用報頭中的校驗值來保證數(shù)據(jù)的安全。校驗值首先在數(shù)據(jù)發(fā)送方通過特殊的算法計算得出,在傳遞到接收方之后,還需要再重新計算。 如果某個數(shù)據(jù)報在傳輸過程中被第三方篡改或者由于線路噪音等原因受到損壞,發(fā)送和接收方的校驗計算值將不會相符,由此UDP協(xié)議可以檢測是否出錯。其實在UDP協(xié)議中校驗功能是可選的,如果將其關(guān)閉可以使系統(tǒng)的性能有所提升。這與TCP協(xié)議是不同的,后者要求必須具有校驗值。 2.實現(xiàn) 實現(xiàn)如下:在觸摸屏開展畫圖,使其在液晶屏上顯示,同時通過網(wǎng)絡(luò)傳輸數(shù)據(jù),使其在計算機屏幕上顯示,并由計算機控制去除液晶屏上的圖形。 步驟如下: (

5、1)新建工程 (2)在main.c文件中編輯初始化網(wǎng)絡(luò)函數(shù)void InitNetWork()/初始化網(wǎng)絡(luò) U32 ipaddr32,ipmaskaddr32,ipgateaddr32; U8 *Mac; ipaddr32=Get_ipaddr(); /獲取IP地址 ipmaskaddr32=Get_maskaddr();/獲取子網(wǎng)掩碼 ipgateaddr32=Get_gwaddr(); /獲取網(wǎng)關(guān) Mac=Get_mac(); /獲取網(wǎng)卡地址NetPortChoose(0); /選擇網(wǎng)口,必須在配置網(wǎng)絡(luò)以前開展 initOSNet(ipaddr32, ipmaskaddr32, ipgat

6、eaddr32,Mac);/配置網(wǎng)絡(luò) OSTimeDly(1000);/任務掛起1秒 printk(“init Ethernet and UDP is ok!n”); (3)定義計算機端套接字,全局變量(4)編寫Main_Task任務及消息循環(huán)主要負責響應觸摸屏消息,在屏幕上畫圖,然后將數(shù)據(jù)傳輸?shù)接嬎銠C上。 對觸摸屏消息的處理和鍵盤消息類似,其消息類型pMsg-Message為OSM_TOUCH_SCREEN,消息參數(shù)pMsg-LParam中包含了觸摸屏的動作信息,定義如下: #define TCHSCR_ACTION_NULL 0 #define TCHSCR_ACTION_CLICK 1

7、/觸摸 屏單擊 #define TCHSCR_ACTION_DBCLICK 2 /觸 摸屏雙擊 #define TCHSCR_ACTION_DOWN 3 /觸摸 屏按下 #define TCHSCR_ACTION_UP 4 /觸摸 屏抬起 #define TCHSCR_ACTION_MOVE 5 /觸摸 屏移動 消息參數(shù)pMsg-WParam中則包含了觸摸 點的坐標信息,低16位是X坐標值,高16位是Y坐標值。這里當觸摸屏產(chǎn)生“按下”動作后采用MoveTo()函數(shù)設(shè)置繪圖起始點坐標,當產(chǎn)生“移動”動作后采用LineTo()函數(shù)繪制線段。 3.解決方案 3.1 建立Socket 為了建立建立S

8、o c k e t,程序可以調(diào)用Socket函數(shù),該函數(shù)返回一個類似于文件描述符的句柄。socket函數(shù)原型為: int socket(int domain, int type,intprotocol); domain指明所使用的協(xié)議族,通常為PF_INET,表示互聯(lián)網(wǎng)協(xié)議族(TCP/IP協(xié)議族);type參數(shù)指定socket的類型:SOCK_STREAM或SOCK_DGRAM,Socket接口還定義了原始Socket(SOCK_RAW),允許程序使用低層協(xié)議;protocol通常賦值“0”.Socket()調(diào)用返回一個整型socket描述符,你可以在后面的調(diào)用使用它。 Socket描述符是一

9、個指向內(nèi)部數(shù)據(jù)構(gòu)造的指針,它指向描述符表入口。調(diào)用Socket函數(shù)時,socket執(zhí)行體將建立一個Socket,實際上“建立一個Socket”意味著為一個Socket數(shù)據(jù)構(gòu)造分配存儲空間。Socket執(zhí)行體為你管理描述符表。 兩個網(wǎng)絡(luò)程序之間的一個網(wǎng)絡(luò)連接包括五種信息:通信協(xié)議、本地協(xié)議地址、本地主機端口、遠端主機地址和遠端協(xié)議端口。Socket數(shù)據(jù)構(gòu)造中包含這五種信息。 3.2 配置Socket 通過socket調(diào)用返回一個socket描述符后,在使用socket開展網(wǎng)絡(luò)傳輸以前,必須配置該socket.面向連接的socket客戶端通過調(diào)用Connect函數(shù)在socket數(shù)據(jù)構(gòu)造中保存本地和

10、遠端信息。無連接socket的客戶端和服務端以及面向連接socket的服務端通過調(diào)用bind函數(shù)來配置本地信息。 Bind函數(shù)將socket與本機上的一個端口相關(guān)聯(lián),隨后你就可以在該端口監(jiān)聽服務請求。 Bind函數(shù)原型為: int bind(int sockfd,struct sockaddr*my_addr,int addrlen); Sockfd是調(diào)用socket函數(shù)返回的socket描述符,my_addr是一個指向包含有本機IP地址及端口號等信息的sockaddr類型的指針;addrlen常被設(shè)置為3.3 建立連接 面向連接的客戶程序使用Connect函數(shù)來配置socket并與遠端服務器

11、建立一個TCP連接,其函數(shù)原型為: int connect(int sockfd,struct sockaddr*serv_addr,int addrlen); Sockfd是socket函數(shù)返回的socket描述符;serv_addr是包含遠端主機IP地址和端口號的指針;addrlen是遠端地址構(gòu)造的長度。 Connect函數(shù)在出現(xiàn)錯誤時返回-1,并且設(shè)置errno為相應的錯誤碼。開展客戶端程序設(shè)計無須調(diào)用bind(),因為這種情況下只需知道目的機器的IP地址,而客戶通過哪個端口與服務器建立連接并不需要關(guān)心,socket執(zhí)行體為你的程序自動選擇一個未被占用的端口,并通知你的程序數(shù)據(jù)什么時候到

12、達端口。 Connect函數(shù)啟動和遠端主機的直接連接。只有面向連接的客戶程序使用socket時才需要將此socket與遠端主機相連。無連接協(xié)議從不建立直接連接。面向連接的服務器也從不啟動一個連接,它只是被動的在協(xié)議端口監(jiān)聽客戶的請求。 Listen函數(shù)使socket處于被動的監(jiān)聽模式,并為該socket建立一個輸入數(shù)據(jù)隊列,將到達的服務請求保存在此隊列中,直到程序處理它們。 int listen(int sockfd,int backlog); 首先,當accept函數(shù)監(jiān)視的socket收到連接請求時,socket執(zhí)行體將建立一個新的socket,執(zhí)行體將這個新socket和請求連接進程的地址聯(lián)系起來,收到服務請求的初始socket仍可以繼續(xù)在以前的socket上監(jiān)聽,同時可以在新的socket描述符上開展數(shù)據(jù)傳輸操作。 3.4 傳輸數(shù)據(jù) Send()和recv()這兩個函數(shù)用于面向連接的socket上開展數(shù)據(jù)傳輸。 Sockfd是你用來傳輸數(shù)據(jù)的socket描述符;msg是一個指向要發(fā)送數(shù)據(jù)的指針;Len是以字節(jié)為單位數(shù)據(jù)的長度;f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論