999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于UDP協議的ARM與其它平臺通訊的解決方案

2013-12-31 00:00:00秦婷
電子世界 2013年24期

【摘要】本文通過案例,首先在觸摸屏進行畫圖,使其在液晶屏上顯示,同時通過網絡傳輸數據,使其在計算機屏幕上顯示,并由計算機控制清除液晶屏上的圖形,實現了基于UDP協議的ARM、X86平臺之間的通訊,從而提出了基于UDP協議的ARM與其它平臺之間通訊的解決方案。

【關鍵詞】UDP協議;ARM;X86;通訊;解決方案

隨著人工智能的應用,ARM產品已經遍布到各個領域:工業控制、無線通訊領域、消費類電子產品、成像和安全產品,包括現在流行的數碼相機和打印機中絕大部分采用ARM技術,手機中的32位SIM智能卡也采用了ARM技術。除此以外,ARM微處理器及技術還應用到許多不同的領域,并會在將來取得更加廣泛的應用,因此,ARM與其它平臺之間通訊就顯得尤為重要。

1.UDP協議本質

UDP協議是英文User Datagram Protocol的縮寫,即用戶數據報協議,主要用來支持那些需要在計算機之間傳輸數據的網絡應用。包括網絡視頻會議系統在內的眾多客戶/服務器模式的網絡應用都需要使用UDP協議。UDP協議從問世至今已經被使用了很多年,雖然其最初的光彩已經被一些類似協議所掩蓋,但即使是在今天,UDP仍然不失為一項非常實用和可行的網絡傳輸層協議。

UDP協議使用端口號為不同的應用保留其各自的數據傳輸通道。UDP和TCP協議正是采用這一機制實現對同一時刻內多項應用同時發送和接收數據的支持。數據發送一方(可以是客戶端或服務器端)將UDP數據報通過源端口發送出去,而數據接收一方則通過目標端口接收數據。有的網絡應用只能使用預先為其預留或注冊的靜態端口;而另外一些網絡應用則可以使用未被注冊的動態端口。因為UDP報頭使用兩個字節存放端口號,所以端口號的有效范圍是從0到65535。一般來說,大于49151的端口號都代表動態端口。

數據報的長度是指包括報頭和數據部分在內的總的字節數。因為報頭的長度是固定的,所以該域主要被用來計算可變長度的數據部分(又稱為數據負載)。數據報的最大長度根據工作環境的不同而各異。從理論上說,包含報頭在內的數據報的最大長度為65535字節。不過,一些實際應用往往會限制數據報的大小,有時會降低到8192字節。

UDP協議使用報頭中的校驗值來保證數據的安全。校驗值首先在數據發送方通過特殊的算法計算得出,在傳遞到接收方之后,還需要再重新計算。

如果某個數據報在傳輸過程中被第三方篡改或者由于線路噪音等原因受到損壞,發送和接收方的校驗計算值將不會相符,由此UDP協議可以檢測是否出錯。其實在UDP協議中校驗功能是可選的,如果將其關閉可以使系統的性能有所提升。這與TCP協議是不同的,后者要求必須具有校驗值。

2.實現案例

實現案例如下:在觸摸屏進行畫圖,使其在液晶屏上顯示,同時通過網絡傳輸數據,使其在計算機屏幕上顯示,并由計算機控制清除液晶屏上的圖形。

步驟如下:

(1)新建工程

(2)在main.c文件中編輯初始化網絡函數

void InitNetWork()//初始化網絡

{

U32 ipaddr32,ipmaskaddr32,ipgateaddr32;

U8 *Mac;

ipaddr32=Get_ipaddr(); //獲取IP地址

ipmaskaddr32=Get_maskaddr();//獲取子網掩碼

ipgateaddr32=Get_gwaddr(); //獲取網關

Mac=Get_mac(); //獲取網卡地址

NetPortChoose(0); //選擇網口,必須在配置網絡以前進行

initOSNet(ipaddr32, ipmaskaddr32, ipgateaddr32,Mac);//配置網絡

OSTimeDly(1000);//任務掛起1秒

printk(\"init Ethernet and UDP is ok!\n\");

}

(3)定義計算機端套接字,全局變量

(4)編寫Main_Task任務及消息循環

主要負責響應觸摸屏消息,在屏幕上畫圖,然后將數據傳輸到計算機上。

對觸摸屏消息的處理和鍵盤消息類似,其消息類型pMsg->Message為OSM_TOUCH_SCREEN,消息參數pMsg->LParam中包含了觸摸屏的動作信息,定義如下:

#define TCHSCR_ACTION_NULL 0

#define TCHSCR_ACTION_CLICK 1 //觸摸屏單擊

#define TCHSCR_ACTION_DBCLICK 2 //觸摸屏雙擊

#define TCHSCR_ACTION_DOWN 3 //觸摸屏按下

#define TCHSCR_ACTION_UP 4 //觸摸屏抬起

#define TCHSCR_ACTION_MOVE 5 //觸摸屏移動

消息參數pMsg->WParam中則包含了觸摸點的坐標信息,低16位是X坐標值,高16位是Y坐標值。這里當觸摸屏產生“按下”動作后采用MoveTo()函數設置繪圖起始點坐標,當產生“移動”動作后采用LineTo()函數繪制線段。

3.解決方案

3.1 建立Socket

為了建立建立Socket,程序可以調用Socket函數,該函數返回一個類似于文件描述符的句柄。socket函數原型為:

int socket(int domain, int type,int protocol);

domain指明所使用的協議族,通常為PF_INET,表示互聯網協議族(TCP/IP協議族);type參數指定socket的類型:SOCK_STREAM或SOCK_DGRAM,Socket接口還定義了原始Socket(SOCK_RAW),允許程序使用低層協議;protocol通常賦值”0”。Socket()調用返回一個整型socket描述符,你可以在后面的調用使用它。

Socket描述符是一個指向內部數據結構的指針,它指向描述符表入口。調用Socket函數時,socket執行體將建立一個Socket,實際上”建立一個Socket”意味著為一個Socket數據結構分配存儲空間。Socket執行體為你管理描述符表。

兩個網絡程序之間的一個網絡連接包括五種信息:通信協議、本地協議地址、本地主機端口、遠端主機地址和遠端協議端口。Socket數據結構中包含這五種信息。

3.2 配置Socket

通過socket調用返回一個socket描述符后,在使用socket進行網絡傳輸以前,必須配置該socket。面向連接的socket客戶端通過調用Connect函數在socket數據結構中保存本地和遠端信息。無連接socket的客戶端和服務端以及面向連接socket的服務端通過調用bind函數來配置本地信息。

Bind函數將socket與本機上的一個端口相關聯,隨后你就可以在該端口監聽服務請求。Bind函數原型為:

int bind(int sockfd,struct sockaddr *my_addr,int addrlen);

Sockfd是調用socket函數返回的socket描述符,my_addr是一個指向包含有本機IP地址及端口號等信息的sockaddr類型的指針;addrlen常被設置為

3.3 建立連接

面向連接的客戶程序使用Connect函數來配置socket并與遠端服務器建立一個TCP連接,其函數原型為:

int connect(int sockfd,struct sockaddr *serv_addr,int addrlen);

Sockfd是socket函數返回的socket描述符;serv_addr是包含遠端主機IP地址和端口號的指針;addrlen是遠端地址結構的長度。Connect函數在出現錯誤時返回-1,并且設置errno為相應的錯誤碼。進行客戶端程序設計無須調用bind(),因為這種情況下只需知道目的機器的IP地址,而客戶通過哪個端口與服務器建立連接并不需要關心,socket執行體為你的程序自動選擇一個未被占用的端口,并通知你的程序數據什么時候到達端口。

Connect函數啟動和遠端主機的直接連接。只有面向連接的客戶程序使用socket時才需要將此socket與遠端主機相連。無連接協議從不建立直接連接。面向連接的服務器也從不啟動一個連接,它只是被動的在協議端口監聽客戶的請求。

Listen函數使socket處于被動的監聽模式,并為該socket建立一個輸入數據隊列,將到達的服務請求保存在此隊列中,直到程序處理它們。

int listen(int sockfd,int backlog);

首先,當accept函數監視的socket收到連接請求時,socket執行體將建立一個新的socket,執行體將這個新socket和請求連接進程的地址聯系起來,收到服務請求的初始socket仍可以繼續在以前的socket上監聽,同時可以在新的socket描述符上進行數據傳輸操作。

3.4 傳輸數據

Send()和recv()這兩個函數用于面向連接的socket上進行數據傳輸。

Sockfd是你用來傳輸數據的socket描述符;msg是一個指向要發送數據的指針;Len是以字節為單位數據的長度;flags一般情況下設置為0(關于該參數的用法可參照man手冊)。

Send()函數返回實際上發送出的字節數,可能會少于你希望發送的數據。在程序中應該將send()的返回值與欲發送的字節數進行比較。當send()返回值與len不匹配時,應該對這種情況進行處理。

3.5 傳輸結束

當所有的數據操作結束以后,你可以調用close()函數來釋放該socket,從而停止在該socket上的任何數據操作。

作者簡介:秦婷,工學碩士,副教授,內蒙古電子信息職業技術學院系主任,研究方向:計算機網絡、計算機軟件開發。

主站蜘蛛池模板: 国产精品.com| 免费高清a毛片| 国产无码制服丝袜| 欧美在线国产| 国产成人麻豆精品| 亚洲综合久久成人AV| 国产在线无码一区二区三区| 亚洲高清国产拍精品26u| 日日噜噜夜夜狠狠视频| 国产在线八区| 最新国产高清在线| 日本一本正道综合久久dvd | 亚洲福利网址| 国产不卡一级毛片视频| 91青青草视频| 国内丰满少妇猛烈精品播| 国产福利一区视频| 国产一区二区三区精品久久呦| 亚洲熟女中文字幕男人总站| 国产精品无码久久久久久| 国产91精品调教在线播放| 成人小视频在线观看免费| 婷五月综合| 久久亚洲国产最新网站| 日韩av电影一区二区三区四区| 日本在线欧美在线| 国产一在线观看| 四虎永久免费网站| 欧美区国产区| www.亚洲一区| 午夜三级在线| 欧美五月婷婷| 国产导航在线| 国产麻豆精品手机在线观看| 欧美成人精品一级在线观看| 波多野结衣第一页| 国产欧美日韩资源在线观看| 美女一级毛片无遮挡内谢| 香蕉网久久| 欧美亚洲国产一区| 色欲综合久久中文字幕网| 伊人成人在线| h网站在线播放| 怡红院美国分院一区二区| P尤物久久99国产综合精品| 东京热av无码电影一区二区| 999国产精品永久免费视频精品久久| 国产日韩欧美在线视频免费观看| 成人一区专区在线观看| 久草热视频在线| 精品国产美女福到在线直播| 中文无码伦av中文字幕| 国产极品美女在线观看| 日本成人福利视频| 欧美特级AAAAAA视频免费观看| www亚洲精品| 精品亚洲欧美中文字幕在线看| 老色鬼久久亚洲AV综合| 久久精品免费看一| 国产在线专区| 亚洲成年人片| 国产99视频免费精品是看6| 亚洲天堂区| 伊人久久福利中文字幕| 亚洲欧美日韩成人在线| av在线5g无码天天| 亚洲成人一区二区三区| 免费高清毛片| 丁香亚洲综合五月天婷婷| 男女男免费视频网站国产| 国产成人三级在线观看视频| 99成人在线观看| 久久亚洲国产一区二区| 欧美一区二区三区不卡免费| 真实国产精品vr专区| 91口爆吞精国产对白第三集| 亚洲成人网在线播放| 欧美性猛交xxxx乱大交极品| 91口爆吞精国产对白第三集| 理论片一区| 国模私拍一区二区| 四虎免费视频网站|