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


曙海教育集團論壇Linux專區Linux應用開發 → Linux Socket編程及其在無線網關中的應用


  共有9607人關注過本帖樹形打印

主題:Linux Socket編程及其在無線網關中的應用

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


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

l  引言

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

該文在構建基于嵌入式Linux和MPC852T無線網關平臺的基礎上,編程實現了無線網關平臺與無線終端之間的無線通信,并給出了無線網關平臺與無線終端之間通信的測試結果。

2  Linux下的socket編程

2.1 Socket編程

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

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

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

2.2 Linux下的socket函數庫

socket是面向用戶的,針對客戶和服務器程序提供不同的socket系統調用。客戶隨機申請一個socket,系統為之分配一個socket號,服務器擁有全局公認的socket,任何客戶都可以向它發出一個連接請求和信息請求。無論socket的內部機制如何,它提供給程序員的最終是一組系統調用,即socket的庫函數。Linux這些庫函數同樣適用于嵌入式linux。下面是編制程序常用的庫函數:

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

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

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

Bind函數原型為:

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

函數在正常時返回0,否則返回l,同時error是系統錯誤碼。

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

函數正常時返回0,否則返回1,同時error是系統錯誤碼。

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

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

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

函數在正常建立連接時返回0,否則返回l,系統錯誤碼在error中。

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

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

3 無線網關平臺的構建

為了將無線終端設備接入控制網絡實現遠程監控,根據條件構建了基于MPC852T和嵌入式Linux的無線網關平臺。MPC852T是Motorola推出的面向低端的一款通信處理器,具有通信和網絡處理能力強、可靠性高、功耗低、功能集成度高等優點,并且有眾多的操作系統支持,這使得它在各種嵌入式系統,尤其是在網絡通信以及數據采集和傳輸等系統中的應用較為廣泛。

無線網關的硬件設計方案采用中心控制方案,中央處理器選用MPC852T,在MPC852T外圍配置一個RS-232串口、一個10M以太網口、一個100M以太網接口、SDRAM同步動態隨機存儲器等構成無線網關的硬件平臺,無線網關的硬件系統結構圖如圖1所示。

無線網關與無線終端通信的實現

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

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

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

#define PORT 3000       /*設定服務器監聽端口*/

………………

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

{

int second;

int sockfd,new_fd;           /* sockfd為監聽用描述符*/

struct sockaddr_in srvaddr;    /*定義服務器sock地址*/

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

………………

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

………………

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

………………

for(;;){          /*開始服務器循環*/

/*等待連接*/

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;

}

}

測試結果

在上位機開啟通信終端,設置好串口參數,進入超級終端。無線網關平臺上運行服務器端程序,同時在終端上運行客戶端程序,即可進行測試,測試結果如圖2所示。

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

圖2  無線網關與無線終端測試結果圖

6  

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


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

返回版面帖子列表

Linux Socket編程及其在無線網關中的應用








簽名
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
精品国产乱码久久久久久久| 久久69国产一区二区蜜臀| 色综合一个色综合亚洲| 日韩成人av电影在线| 另类欧美小说| 免费在线成人av电影| 青青草国产精品| 视频二区一区| 91久久一区二区| 欧美日韩一区二区在线视频| 制服.丝袜.亚洲.另类.中文| 久久伊人蜜桃av一区二区| 国产精品全国免费观看高清| 亚洲欧美色综合| 日韩精品国产欧美| 国产一区高清在线| 99re成人在线| 欧美日韩国产综合视频在线| 色综合中文综合网| 欧美国产综合一区二区| 国产亚洲综合av| 亚洲色图20p| 奇米一区二区三区| 成人国产精品免费观看| 久久99久久精品国产| 伊人色综合久久天天五月婷| 欧美三级中文字| 国产欧美视频在线观看| 亚洲成在人线在线播放| 国产精品996| 久久精品国产99精品国产亚洲性色| 日韩av一级大片| 制服视频三区第一页精品| 国产女同互慰高潮91漫画| 午夜精品成人在线视频| 国产成人啪午夜精品网站男同| 国产亚洲欧美另类一区二区三区| 亚洲一卡二卡| 国产欧美一二三区| 久久精品久久久精品美女| 99九九视频| 欧美亚洲一区三区| 国产精品国产三级国产普通话99| 麻豆精品视频在线观看视频| 91免费看网站| 欧美日韩电影在线| 亚洲尤物在线视频观看| caoporn国产一区二区| 亚洲一区二区三区精品在线观看| 精品福利av导航| 免费视频一区二区| 狠狠久久综合婷婷不卡| 欧美夫妻性生活| 亚洲一区二区三区三| 91麻豆国产福利在线观看| 色偷偷久久人人79超碰人人澡| 国产欧美一区二区三区在线老狼| 精品综合免费视频观看| 蜜桃999成人看片在线观看| 制服丝袜中文字幕亚洲| 亚洲国产一区二区三区 | 91视频在线观看免费| 色综合欧美在线| |精品福利一区二区三区| 国产精品亚洲一区二区三区在线| 色一情一乱一伦一区二区三区丨 | 91精品在线麻豆| 亚洲成a人v欧美综合天堂下载| 91丝袜美腿高跟国产极品老师 | 不卡av在线网| 在线观看三级视频欧美| 亚洲精品视频自拍| 风间由美久久久| 欧美大片一区二区三区| 麻豆精品在线看| 亚洲精品成人a8198a| 日韩美女视频19| 国产精品久久久久久久小唯西川 | 欧美日韩激情一区| 午夜精品一区在线观看| 久久99久国产精品黄毛片色诱| 日韩精品福利视频| 亚洲区小说区图片区qvod| 91九色蝌蚪成人| 日韩精品一区二| 国产精品一区二区久激情瑜伽| 一本久道中文字幕精品亚洲嫩| 一区二区三区免费| 久久国产主播精品| 国产精品激情偷乱一区二区∴| 91美女精品福利| 久久久久久久久岛国免费| 成人免费看片app下载| 欧美精品在线视频| 精品无人码麻豆乱码1区2区| 色94色欧美sute亚洲13| 偷拍自拍另类欧美| 中文字幕免费在线不卡| 午夜在线电影亚洲一区| 亚洲狠狠婷婷综合久久久| 亚洲一区二区精品久久av| 欧美三级电影在线播放| 亚洲精品国产成人久久av盗摄| 精品视频在线观看| 亚洲另类在线一区| 日韩精品不卡| 午夜视频在线观看一区二区三区| 久久青青草原| 伊人性伊人情综合网| 欧美日韩在线一区二区三区| 亚洲欧美色一区| 日韩精品成人一区二区在线观看| 一二三区精品福利视频| 日本亚洲欧洲精品| 午夜视频久久久久久| 一本大道久久a久久精品综合| 蜜臀a∨国产成人精品| 欧美日本一区二区三区四区| 成人网男人的天堂| 久久综合国产精品| 国产精品免费观看高清| 亚洲视频图片小说| 色综合久久av| 男人操女人的视频在线观看欧美 | 亚洲精品一区二区三| 日韩成人免费在线| 欧美精品九九99久久| 9色porny自拍视频一区二区| 国产精品丝袜91| 性欧美videosex高清少妇| 久久av资源站| 久久精品一区二区三区不卡牛牛| 国产午夜精品一区| 日韩国产欧美三级| 欧美一区在线视频| 国产精品麻豆免费版| 亚洲成av人综合在线观看| 欧美精品丝袜中出| 5566av亚洲| 日韩中文字幕麻豆| 欧美不卡在线视频| 久久久久高清| 日本免费在线视频不卡一不卡二| 91精品国产aⅴ一区二区| 福利视频久久| 日av在线不卡| 国产婷婷精品av在线| 亚洲欧美日韩在线综合| 成人美女视频在线观看18| 国产精品大尺度| 欧美日韩精品专区| 久久久不卡网国产精品一区| 精品不卡在线| 蜜乳av一区二区三区| 26uuuu精品一区二区| 日韩中文字幕av在线| 中文字幕在线观看一区| 欧美日韩免费一区二区三区视频| 成人福利视频网站| 亚洲午夜激情网页| 精品国产欧美一区二区| 午夜国产不卡在线观看视频| 日韩一区二区三免费高清| 欧美精品久久| 成人教育av在线| 丝袜亚洲另类欧美| 国产精品青草久久| 91精品国产综合久久精品图片| 农村寡妇一区二区三区| 成人黄色av网站在线| 日本午夜精品一区二区三区电影 | 欧美日韩在线电影| 久久久久久久久久码影片| 国产·精品毛片| 亚洲a一区二区| 国产精品美女久久久久av爽李琼| 欧日韩精品视频| 久久久一本精品99久久精品66| 国产福利电影一区二区三区| 午夜精品一区二区三区三上悠亚 | 亚洲成人av在线电影| 久久久久久久综合色一本| 欧美网站一区二区| 欧美激情视频一区二区三区| 成人av电影在线观看| 精品亚洲免费视频| 亚洲国产成人av| 国产精品国产馆在线真实露脸| 精品国产自在久精品国产| 欧美色综合网站| 中文字幕一区二区三区乱码| 国产激情美女久久久久久吹潮| 国产精品一二三区| 日韩av高清在线观看| 亚洲激情自拍视频| ...xxx性欧美| 国产精品福利一区| 国产丝袜欧美中文另类| 久久一区二区三区四区| 精品国产伦一区二区三区观看方式|