久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区


曙海教育集團論壇Linux專區(qū)Linux應(yīng)用開發(fā) → Linux Socket編程及其在無線網(wǎng)關(guān)中的應(yīng)用


  共有9609人關(guān)注過本帖樹形打印

主題:Linux Socket編程及其在無線網(wǎng)關(guān)中的應(yīng)用

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發(fā)短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
Linux Socket編程及其在無線網(wǎng)關(guān)中的應(yīng)用  發(fā)帖心情 Post By:2010-11-23 13:22:06

l  引言

Linux具有豐富的網(wǎng)絡(luò)功能,完善的內(nèi)置網(wǎng)絡(luò)是Linux的一大特點。嵌入式Linux專用于微控制器,同樣具有優(yōu)秀的網(wǎng)絡(luò)功能。Linux是一種可移植的操作系統(tǒng),能夠在從微型計算機到大型計算機的任何環(huán)境中和任何平臺上運行。可移植性為運行Linux的不同計算機平臺與其他任何機器進行準確而有效的通訊提供了手段,不需要另外增加特殊的,昂貴的通訊接口。

該文在構(gòu)建基于嵌入式Linux和MPC852T無線網(wǎng)關(guān)平臺的基礎(chǔ)上,編程實現(xiàn)了無線網(wǎng)關(guān)平臺與無線終端之間的無線通信,并給出了無線網(wǎng)關(guān)平臺與無線終端之間通信的測試結(jié)果。

2  Linux下的socket編程

2.1 Socket編程

socket有3種類型:流式套接字、數(shù)據(jù)報套接字及原始套接字。流式套接字定義了一種可靠的面向連接的服務(wù),實現(xiàn)了無差錯的數(shù)據(jù)傳輸。數(shù)據(jù)報套接字定義了一種無連接的服務(wù),數(shù)據(jù)通過相互獨立的報文進行傳輸,是無序的,并且不保證可靠。原始套接字允許對低層協(xié)議如IP或ICMP直接訪問,主要用于新的網(wǎng)絡(luò)協(xié)議實現(xiàn)的測試等。

無連接服務(wù)器一般都是面向事務(wù)處理的,一個請求和一個應(yīng)答就完成客戶程序與服務(wù)程序之間的相互作用。

面向連接服務(wù)器處理的請求比較復(fù)雜,往往是并發(fā)服務(wù)器。工作過程如下:服務(wù)進程首先調(diào)用socket( )創(chuàng)建一個字節(jié)流套接字,并調(diào)用bind( )將服務(wù)器地址捆扎在該套接字上,接著調(diào)用listen( )監(jiān)聽連接請求,隨后調(diào)用accept( )做好與客戶進程建立連接的準備,無連接請求時,服務(wù)進程被阻塞。當連接請求到來后,服務(wù)器進程被喚醒,建立一個新的Socket,并用新套接字同客戶進程的套接字建立連接,而服務(wù)進程最早生成的套接字則繼續(xù)用于監(jiān)聽網(wǎng)絡(luò)上的服務(wù)請求。客戶進程調(diào)用socket( )創(chuàng)建字節(jié)流套接字,然后調(diào)用connect( )向服務(wù)進程發(fā)出連接請求。服務(wù)進程和客戶進程通過調(diào)用read( )/recv( )和Write( )/send( )交換數(shù)據(jù)。

2.2 Linux下的socket函數(shù)庫

socket是面向用戶的,針對客戶和服務(wù)器程序提供不同的socket系統(tǒng)調(diào)用?蛻綦S機申請一個socket,系統(tǒng)為之分配一個socket號,服務(wù)器擁有全局公認的socket,任何客戶都可以向它發(fā)出一個連接請求和信息請求。無論socket的內(nèi)部機制如何,它提供給程序員的最終是一組系統(tǒng)調(diào)用,即socket的庫函數(shù)。Linux這些庫函數(shù)同樣適用于嵌入式linux。下面是編制程序常用的庫函數(shù):

1) socket( ):建立Socket,此函數(shù)用來建立Socket描述字,并為此Socket建立資源(為一個Socket數(shù)據(jù)結(jié)構(gòu)分配存儲空間)。應(yīng)用程序在使用socket之前,首先必須擁有一個socket。socket( )向應(yīng)用程序提供創(chuàng)建socket的手段。socket( )函數(shù)原形為int socket(int domain,int type,int protoco1);函數(shù)中的domain是參數(shù)指定通信中使用的協(xié)議簇,也就是網(wǎng)絡(luò)的類型,通常為PF_INET,表示互聯(lián)網(wǎng)協(xié)議族(TCP/IP協(xié)議族);type參數(shù)指定socket的類型:SOCK_STREAM或SOCK_DGRAM,Socket接口還定義了原始Socket(SOCK_RAW),允許程序使用低層協(xié)議;protocol是參數(shù)指定通信中使用的協(xié)議。

函數(shù)在正常時返回socket描述符;否則返回l,錯誤狀態(tài)在全局變量error里。

2) bind( ):綁定本地地址,即將一個本地地址與一個SOCKET描述字連接在一起。此函數(shù)在服務(wù)程序上使用,是調(diào)用監(jiān)聽函數(shù)listen()必須要調(diào)用的函數(shù)。

Bind函數(shù)原型為:

int bind(int sockfd, struct sockaddr *my_addr, int addrlen)。bind()函數(shù)給已經(jīng)打開的socket指定本地地址。函數(shù)中的sockfd是調(diào)用socket函數(shù)返回的socket描述符;addrlen是my-addr結(jié)構(gòu)的長度,常被設(shè)置為sizeof(struct sockaddr);my-addr是用于偵聽連接請求的本地地址。

函數(shù)在正常時返回0,否則返回l,同時error是系統(tǒng)錯誤碼。

3) listen( ):準備接收連接請求。在用bind()給一個socket設(shè)定本地地址之后,就可以將這個socket用于接受連接請求,即listen()。函數(shù)原形為int listen(int s,int backlog);函數(shù)中的s是socket描述符;backlong是連接請求暫存隊列長度。

函數(shù)正常時返回0,否則返回1,同時error是系統(tǒng)錯誤碼。

4) accept( ):服務(wù)端應(yīng)用程序調(diào)用此函數(shù)來接受客戶端socket連接請求。在系統(tǒng)調(diào)用listen( )之后,系統(tǒng)就在socket的連接請求暫存隊列里存放每一個向該socket建立的連接請求,accept()的作用是從該暫存隊列中取出一個連接請求,用該socket的數(shù)據(jù),創(chuàng)建一個新的socket用來在服務(wù)端和客戶端之間傳遞接收信息,而原來socket仍然可以接收其他客戶端的連接要求。

函數(shù)正常創(chuàng)建了一個新的連接,那么返回非負的整數(shù),即新連接的socket描述符,否則返回l,error是系統(tǒng)錯誤碼。

5) connect( ):建立連接。bind( ),listen( )和accept( )都是用于被動地等待對方建立連接時需要使用的,connect( )函數(shù)是在主動地向?qū)Ψ浇⑦B接時使用的。函數(shù)原形為int connect(int sockfd,struct sockaddr*srvaddr,int addrlen);函數(shù)中的sockfd是socket描述符;srvaddr是通信目的方地址;addrlen是目的地址長度。

函數(shù)在正常建立連接時返回0,否則返回l,系統(tǒng)錯誤碼在error中。

6) close( ):此函數(shù)是用來關(guān)閉某一socket。socket和文件描述符的關(guān)閉操作都使用這個函數(shù)。函數(shù)原形為int close(int fd);參數(shù)fd是socket描述符。函數(shù)在正常時返回0,返回1表示出錯。

7) send( )/recv( ):用于socket的發(fā)送和接收數(shù)據(jù)。在連接建立完成后,通信雙方就可以使用以上這些函數(shù)來進行數(shù)據(jù)的發(fā)送和接收操作。

3 無線網(wǎng)關(guān)平臺的構(gòu)建

為了將無線終端設(shè)備接入控制網(wǎng)絡(luò)實現(xiàn)遠程監(jiān)控,根據(jù)條件構(gòu)建了基于MPC852T和嵌入式Linux的無線網(wǎng)關(guān)平臺。MPC852T是Motorola推出的面向低端的一款通信處理器,具有通信和網(wǎng)絡(luò)處理能力強、可靠性高、功耗低、功能集成度高等優(yōu)點,并且有眾多的操作系統(tǒng)支持,這使得它在各種嵌入式系統(tǒng),尤其是在網(wǎng)絡(luò)通信以及數(shù)據(jù)采集和傳輸?shù)认到y(tǒng)中的應(yīng)用較為廣泛。

無線網(wǎng)關(guān)的硬件設(shè)計方案采用中心控制方案,中央處理器選用MPC852T,在MPC852T外圍配置一個RS-232串口、一個10M以太網(wǎng)口、一個100M以太網(wǎng)接口、SDRAM同步動態(tài)隨機存儲器等構(gòu)成無線網(wǎng)關(guān)的硬件平臺,無線網(wǎng)關(guān)的硬件系統(tǒng)結(jié)構(gòu)圖如圖1所示。

無線網(wǎng)關(guān)與無線終端通信的實現(xiàn)

嵌入式Linux具有完善的TCP/IP協(xié)議棧,為滿足工業(yè)控制過程中傳輸數(shù)據(jù)量小、可靠性高、速度快等要求,這里使用socket編程來實現(xiàn)網(wǎng)絡(luò)通信。無線終端通過無線網(wǎng)卡與無線網(wǎng)關(guān)自動建立鏈接,無線終端完成數(shù)據(jù)的采集,并將采集的數(shù)據(jù)以無線的方式發(fā)送給網(wǎng)關(guān),無線網(wǎng)關(guān)把收到的數(shù)據(jù)上傳給上位機進行分析、處理,最后計算出數(shù)據(jù)發(fā)送的速率。

圖片點擊可在新窗口打開查看

將編寫好的服務(wù)器端和終端程序進行交叉編譯,將編譯得到的二進制可執(zhí)行文件添加到RAMDISK中,壓縮新生成的ramdisk.image文件系統(tǒng)映像文件,重新編譯Linux內(nèi)核,生成Linux內(nèi)核映像文件,然后將內(nèi)核映像文件燒寫到無線網(wǎng)關(guān)平臺的FLASH中。無線網(wǎng)關(guān)平臺(服務(wù)器端)的主程序代碼如下:

#define PORT 3000       /*設(shè)定服務(wù)器監(jiān)聽端口*/

………………

int main(int argc,char* argv[ ])

{

int second;

int sockfd,new_fd;           /* sockfd為監(jiān)聽用描述符*/

struct sockaddr_in srvaddr;    /*定義服務(wù)器sock地址*/

struct sockaddr_in cliaddr;    /*定義客戶的sock地址*/

………………

if(bind(sockfd,(struct sockaddr *)&srvaddr,sizeof(struct sockaddr))==-1)    /*綁定*/

………………

if(listen(sockfd, QUEUE_SIZE) == -1)        /*監(jiān)聽端口是否有請求*/

………………

for(;;){          /*開始服務(wù)器循環(huán)*/

/*等待連接*/

sin_size=sizeof(struct sockaddr_in);

new_fd=accept(sockfd,(struct sockaddr*) &cliaddr,&sin_size);      /*接收連接請求*/

printf("Server:Got connection from %s \n",

inet_ntoa(cliaddr.sin_addr));

if(read(new_fd,&second,4)==-1)      /*接收連接請求*/

………………

close(new_fd);        /*父進程不再需要該socket*/

………………;       

close(sockfd);

return 0;

}

}

測試結(jié)果

在上位機開啟通信終端,設(shè)置好串口參數(shù),進入超級終端。無線網(wǎng)關(guān)平臺上運行服務(wù)器端程序,同時在終端上運行客戶端程序,即可進行測試,測試結(jié)果如圖2所示。

圖片點擊可在新窗口打開查看

圖2  無線網(wǎng)關(guān)與無線終端測試結(jié)果圖

6  結(jié)

目前基于TCP/IP協(xié)議的工業(yè)以太網(wǎng)的在組網(wǎng)時仍需要布線,但在工業(yè)現(xiàn)場,布線時常會受到限制,電纜的連接也限制了現(xiàn)場設(shè)備的移動和網(wǎng)絡(luò)結(jié)構(gòu)的重組,還有一些高速旋轉(zhuǎn)設(shè)備根本無法通過電纜來傳輸數(shù)據(jù)。將802.11b無線通信技術(shù)應(yīng)用于工業(yè)控制網(wǎng)絡(luò),工控網(wǎng)絡(luò)就兼有了無線通信的優(yōu)點:現(xiàn)場設(shè)備無需電纜即可與控制網(wǎng)絡(luò)連接,實現(xiàn)現(xiàn)場數(shù)據(jù)的無線采集和傳輸,對于在一些不可預(yù)知的環(huán)境,尤其是不適于布線的強腐蝕惡劣環(huán)境。本文作者創(chuàng)新點:通過Linux下的socket編程實現(xiàn)了無線網(wǎng)關(guān)與無線終端的通信,可以使用無線通信來完成對現(xiàn)場設(shè)備的控制。


支持(0中立(0反對(0單帖管理 | 引用 | 回復(fù) 回到頂部

返回版面帖子列表

Linux Socket編程及其在無線網(wǎng)關(guān)中的應(yīng)用








簽名
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
99久久精品国产一区二区三区| 亚洲视频电影在线| 在线精品亚洲一区二区| 欧美一级片免费观看| 欧美精品成人一区二区在线观看| 久久久久久久久久久久久久久久av| 好吊色欧美一区二区三区| 美国av一区二区三区| 香蕉久久免费影视| 91久久精品一区二区二区| 欧美日韩国产天堂| 久久精品一区二区| 一区二区三区成人| 日韩av电影天堂| 国产精品一二二区| 草莓视频一区| 亚洲高清123| 欧美精品久久一区二区三区| 欧美大白屁股肥臀xxxxxx| 国产人久久人人人人爽| 亚洲欧美国产毛片在线| 免费成人你懂的| 99国产精品一区| 欧美日韩系列| 欧美日本一区二区在线观看| 久久久综合视频| 亚洲一区二区三区自拍| 久久er99热精品一区二区| 成人h动漫精品一区二区| 久久艳妇乳肉豪妇荡乳av| 日本韩国精品在线| 久久久精品天堂| 天天色天天爱天天射综合| 成人激情文学综合网| 欧美一区激情视频在线观看| 7777精品伊人久久久大香线蕉最新版 | 久久国产精品久久精品国产| 亚洲欧洲日本国产| 日韩欧美激情在线| 亚洲综合在线观看视频| 国产精品123| 欧美日韩喷水| 日韩精品一区二区三区视频在线观看| 亚洲欧美日韩国产成人精品影院| 九色综合国产一区二区三区| 国产精品夜夜夜一区二区三区尤| 在线视频一区二区免费| 国产精品欧美综合在线| 美国毛片一区二区| 精品日本一区二区三区| 6080午夜不卡| 亚洲bt欧美bt精品| 91视频在线观看免费| 欧美综合一区二区| 亚洲蜜臀av乱码久久精品蜜桃| 国产亚洲一区二区三区四区| 日韩视频免费直播| 国产91色综合久久免费分享| 欧美人牲a欧美精品| 中文字幕制服丝袜成人av | 天堂成人国产精品一区| 91精品国产高清久久久久久91裸体| 色综合久久精品| 中文字幕一区二区在线观看| 国产精品一级二级三级| 中文字幕在线亚洲三区| 亚洲欧美激情一区二区| 91在线小视频| 欧美日韩国产首页在线观看| 亚洲一卡二卡三卡四卡五卡| 国产成人一区二区三区免费看| 91精品国产品国语在线不卡| 日韩av成人高清| 亚洲乱码一区二区三区三上悠亚| 国产精品久久99| 不卡日韩av| 欧美精品一区二区三区久久久| 韩国毛片一区二区三区| 日本精品一区二区三区高清 | 丝袜美腿亚洲色图| 久久精品国产精品青草色艺| 国产亚洲欧美日韩在线一区| 成人少妇影院yyyy| 4438x亚洲最大成人网| 久久不见久久见免费视频1| 亚洲综合首页| 亚洲网友自拍偷拍| 日本在线观看一区二区| 亚洲乱码国产乱码精品精98午夜| 国产视频在线观看一区| 国产精品国产三级国产普通话三级| 91视视频在线观看入口直接观看www | 成人a级免费电影| 91精品国产一区二区人妖| 久久精品国产**网站演员| 色香色香欲天天天影视综合网| 亚洲高清不卡在线| 色噜噜一区二区| 亚洲国产综合色| 天天爽天天狠久久久| 亚洲综合区在线| 亚洲伊人婷婷| 蜜桃在线一区二区三区| 欧美体内she精视频| 久久精品国产精品亚洲综合| 欧美视频在线一区二区三区| 美女视频黄a大片欧美| 欧美日韩在线三级| 日韩免费福利电影在线观看| 国产成人免费网站| 精品精品国产高清a毛片牛牛| 成人美女视频在线看| 久久精品夜色噜噜亚洲aⅴ| 国产在线一区二区三区播放| 一区二区三区高清在线| 色狠狠色噜噜噜综合网| 国产不卡视频在线播放| 国产欧美精品一区二区三区四区 | 欧美亚洲动漫精品| 激情文学综合插| 精品国产网站在线观看| 91手机在线观看| 亚洲精品国产成人久久av盗摄| 视频一区视频二区视频三区视频四区国产 | 在线亚洲+欧美+日本专区| 国产酒店精品激情| 久久免费国产精品| 久久av一区二区| 日韩激情视频在线观看| 欧美日韩国产高清一区二区三区| 成人午夜免费视频| 国产精品久99| 91久久久免费一区二区| 成人av影视在线观看| 专区另类欧美日韩| 欧美色图激情小说| 91麻豆国产在线观看| 夜夜爽夜夜爽精品视频| 欧美午夜在线一二页| 99国产一区二区三精品乱码| 亚洲一二三区在线观看| 欧美一区二区三区四区久久| 国产亚洲欧美另类一区二区三区| 日韩av二区在线播放| 日韩精品一区二区三区在线播放 | 国产精品一区二区在线观看 | 亚洲精品老司机| 欧美色视频在线| 波多野结衣成人在线| 日韩精品一级二级| 久久色视频免费观看| 亚洲精品二区| 94-欧美-setu| 蜜桃视频一区二区| 国产精品免费视频网站| 欧美天堂亚洲电影院在线播放| 97人人模人人爽人人喊38tv| 日韩电影在线一区二区三区| 精品国产欧美一区二区| 亚洲在线色站| av一区二区三区四区电影| 久久国产免费看| 亚洲免费av高清| 欧美精品一区二区久久婷婷| 色综合欧美在线| 国产乱码精品一区二区三区中文 | 国产精品福利一区二区| 欧美亚洲另类激情小说| 九九九九久久久久| 成人一区在线观看| 亚洲国产三级在线| 国产日韩欧美制服另类| 在线一区二区三区四区| 鲁丝一区鲁丝二区鲁丝三区| www.色综合.com| 经典三级一区二区| 亚洲国产精品久久不卡毛片| 欧美极品xxx| 日韩亚洲欧美高清| 欧美亚洲另类激情小说| 神马影院午夜我不卡影院| 国产精品日韩一区二区| 成人白浆超碰人人人人| 国产一区二区三区免费播放| 亚洲国产中文字幕| 亚洲欧洲综合另类| 国产午夜精品久久久久久免费视 | 一本一本a久久| 久草精品电影| 91蜜桃网址入口| 国产成人精品一区二| 麻豆精品国产传媒mv男同| 亚洲自拍偷拍图区| 自拍视频在线观看一区二区| 国产亚洲福利社区一区| 精品国产sm最大网站免费看| 欧美精品丝袜久久久中文字幕| 色激情天天射综合网| 一区二区三区欧美在线| 视频一区二区三|