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

基于嵌入式的socket編程及其應用

2015-11-10 13:13:53任安虎李鵬飛
物聯網技術 2015年10期
關鍵詞:嵌入式

任安虎 李鵬飛

摘 要:socket套接字可提供一種在不同計算機,不同系統間通信的解決方案,是在實際網絡編程中使用的重要手段,并且在不同的平臺擁有完善的API接口函數和實現方法。TCP/IP協議是目前使用最廣泛的Internet網絡服務協議,該協議免費、穩定、通用性強,是輕量級數據傳輸的最主流解決方案。文中提供了在TCP/IP協議下的socket編程方法,并建立了一個基于Linux操作系統和S3C2440的ARM嵌入式平臺。使用此方法可實現基于Linux操作系統的ARM平臺與Windows系統的PC間通信。

關鍵詞:socket編程;TCP/IP協議;嵌入式;ARM微處理器;Linux操作系統;應用程序編程接口

中圖分類號:TP393.03 文獻標識碼:B 文章編號:2095-1302(2015)10-00-03

0 引 言

近年來,隨著智慧城市等概念的興起,嵌入式系統在很多領域得到了空前發展。而嵌入式設備與計算機間的數據通信技術是該系統重要的支撐技術[1],以此入手,提供一種基于TCP/IP協議的socket編程實現ARM平臺與PC間的數據通信解決方案,其設計思路與源碼,可供讀者參考借鑒。

使用搭載ARM9架構的S3C2440微處理器和DM9000系列網卡的TX2440A開發板,并在其上移植Linux系統,該系統具有優秀的網絡功能,被廣泛應用于嵌入式領域[2]。將ARM開發板作為客戶端,PC作為服務器,通過socket編程使ARM平臺與PC端建立通信,關鍵源碼及詳細解釋將在最后給出。

1 Socket編程原理及API函數簡介

Socket最早出現于UNIX系統中,是TCP/IP協議棧向應用程序提供的API接口,用于在兩個基于TCP/IP協議的應用程序間相互通信。但設計人員也考慮了socket的擴展,使之可以適用于其他網絡協議,具有良好的通用性[3]。

常見的socket類型分為三種:流模式套接字(SOCK_STREAM)、數據報套接字(SOCK_DGRAM)和原始套接字(SOCK_RAM)。實現作為客戶端的ARM平臺與服務器端的PC間的通信,即實現Linux系統與Windows系統間的通信,因此對應的socket接口函數也有兩套:分別為Linux系統的socket函數和Windows系統的socket函數,socket主要包括用于連接的connect函數,用于接受連接的accept函數,用于發送數據的send函數,用于接收數據的recv函數等。以上函數分別為Linux操作系統的客戶端和Windows操作系統的服務器端socket編程主要使用的函數,只有基于對這些函數的了解和認識,才能更好地理解跨平臺網絡通信的原理和方法。

2 客戶端在ARM上的移植

搭載S3C2440微處理器的TX2440A開發板,在其上移植2.6.32內核版本的Linux系統。通過Linux系統的arm-linux-gcc交叉編譯工具將客戶端源碼進行交叉編譯,生成二進制可執行文件,將該文件拷貝至開發板運行,即可打開客戶端應用程序。

客戶端應用程序的主要源代碼如下:

……

int port = atoi(args[2]);

int st = socket(AF_INET, SOCK_STREAM, 0); //初始化socket,

struct sockaddr_in addr; //定義一個IP地址的結構

memset(&addr, 0, sizeof(addr));

addr.sin_family = AF_INET; //設置結構地址類型為TCP/IP地址

addr.sin_port = htons(port); //端口號:htons:將short類型從host字節類型到 net字節 類型轉化

addr.sin_addr.s_addr = inet_addr(args[1]);//將字符串類型的IP地址轉化為int,賦給addr結構成員.

//調用connect連接到結構addr指定的IP地址和端口號

if (connect(st, (struct sockaddr *) &addr, sizeof(addr)) == -1)

……

while (1)

{

……

read(STDIN_FILENO, s, sizeof(s)); //從鍵盤讀取用戶輸入

if (send(st, s, strlen(s), 0) == -1) //發送buf的數據

……

if (recv(st, s, sizeof(s), 0) > 0) //如果接收數據失敗,循環break

printf("recv %s\n", s);

……

}

close(st); //關閉socket

……

由程序可以看出,客戶端首先創建一個套接字和一個結構體sockaddr保存服務器網絡信息,然后調用connect函數將套接字連接到該結構體指定的IP地址和端口號,連接成功后建立一個字符串s,以死循環的模式讀取鍵盤輸入寫入s,并調用send函數將s發送出去,然后調用recv函數從服務器端接收消息。如果接收數據失敗,則退出循環,關閉套接字。

3 服務器端在PC上的建立

使用Microsoft visual stdio 2013作為開發編譯環境,界面友善,功能強大。

服務器端應用程序主要源代碼如下:

……

//加載socket庫函數

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD(1, 1);

err = WSAStartup(wVersionRequested, &wsaData);

……

if (LOBYTE(wsaData.wVersion) != 1 ||

HIBYTE(wsaData.wVersion) != 1)

{

WSACleanup();

return 0;

}

printf(“load socket function success!\n”);

……

//將IP與server程序綁定

if (bind(st, (struct sockaddr *) &addr, sizeof(addr)) == -1)

……

//server端開始listen,

if (listen(st, 20) == -1)

……

int client_st = 0;//client端socket

struct sockaddr_in client_addr; //表示client端的IP地址

int len = sizeof(client_addr);

……

//accept會阻塞,直到有客戶端連接過來,accept返回client的socket描述符

client_st = accept(st, (struct sockaddr *)&client_addr, &len);

……

while (1)

{

……

int rc = recv(client_st, s, sizeof(s), 0); //recv是阻塞調用,

if (rc > 0) //接收來自client的消息

{

……

fgets( s, sizeof(s), stdin);

send(client_st, s, strlen(s), 0);

}

else

{

……

}

}

close(client_st); //關閉client端socket

close(st); //關閉server端listen的socket

……

由程序可以看出,服務器端首先調用WSAStartup函數加載Windows socket庫函數,創建一個套接字和一個結構體sockaddr保存本地網絡信息,調用bind函數將套接字與本地網絡信息綁定并調用listen函數開始偵聽。然后創建一個客戶端套接字描述符client_st和一個sockaddr_in格式的結構體用于存儲客戶端網絡信息。當有客戶端發起connect請求時,程序調用accept函數與客戶端建立連接,連接成功后建立一個字符串s,以死循環的模式接收來自客戶端的數據寫入s并打印在屏幕上,并讀取鍵盤輸入寫入s,并調用send函數將s發送出去,如果接收失敗則退出循環,釋放客戶端和服務器端套接字的資源。

4 嵌入式設備與計算機的網絡連接

上面章節對客戶端和服務器端的源碼和原理分別做出介紹,讀者也許不能從整體上很好地理解,圖1展示了TCP/IP的客戶端/服務器程序模型,幫助讀者能更直觀的理解TCP/IP網絡連接的原理和流程[4]。

相信結合程序模型圖,以及上面章節對原理和源碼的介紹,讀者很容易的理解網絡中客戶端和服務器收發數據的原理和流程。下面給出客戶端和服務器端應用程序實際在兩個平臺上運行的結果演示。

首先,在VS2013中打開服務器源碼srv.c,編譯運行,服務器阻塞等待客戶端連接請求。其打開圖如圖2所示。

其次,使用交叉編譯工具arm-linuc-gcc編譯客戶端源碼,生成二進制可執行文件clt,將其拷貝至開發板,配置開發板網絡環境,打開客戶端應用程序,通過超級終端查看開發板的運行情況,具體如圖3所示。

圖1 TCP/IP程序模型圖

圖2 服務器打開

圖3 客戶端連接服務器

可以看到服務器已經接受了客戶端的連接請求,此時服務器已經可以和客戶端進行通信,圖4所示是服務器語客戶端進行通信的操作圖形。

圖4 服務器與客戶端通信

5 結 語

伴隨微型專用計算機的發展,嵌入式設備將用于生活的方方面面,嵌入式設備與計算機的通信需求也隨之增長。本文介紹了socket編程機制及跨平臺實現了一組套接字程序,可以看出socket描述網絡程序直觀、實用性強、框架清晰。該系統目前基本實現了即時通信的功能,但尚有一些不完善的地方,如未能實現服務器處理并發客戶端連接請求,下一步我們將對該系統進行改進和完善。

參考文獻

[1]詹文元,金花,程永誼. 基于嵌入式網關的socket編程及通信協議[J].可編程控制器與工廠自動化,2005(1):117-122.

[2]林偉,黃康.基于S3C44B0X的嵌入式網絡通信研究[J].微計算機信息,2007,23(8):36-39.

[3]王堃,于悅,張玉華,等. 面向物聯網應用平臺的Socket設計與優化[J].吉林大學學報(工學版),2012,42(S1):290-294.

[4]鄧全良.Winsock網絡程序設計[M].北京:中國鐵道出版社,2002:36-38.

[5]吳佩賢.Linux環境下基于TCP的Socket編程淺析[J].現代電子技術,2005,28(16):53-56.

[6]郭東升,田秀華.Linux環境下基于Socket的網絡通信[J].軟件導刊,2009,8(1):116-118.

[7]王曉鵬.TCP/IP下的Socket及Winsock通信機制[J].航空計算技術,2004,34(2):126-129.

[8]劉赟. Winsock技術在網絡通信系統中的應用[J].西南科技大學學報,2013,28(2):88-92.

猜你喜歡
嵌入式
Focal&Naim同框發布1000系列嵌入式揚聲器及全新Uniti Atmos流媒體一體機
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
基于嵌入式Linux內核的自恢復設計
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
嵌入式PLC的設計與研究
電子制作(2018年16期)2018-09-26 03:27:18
搭建基于Qt的嵌入式開發平臺
基于嵌入式系統Windows CE的應用程序開發
嵌入式單片機在電機控制系統中的應用探討
電子制作(2017年8期)2017-06-05 09:36:15
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
Altera加入嵌入式視覺聯盟
主站蜘蛛池模板: 国产91熟女高潮一区二区| 国产成人精彩在线视频50| 看国产一级毛片| 在线观看网站国产| 一级毛片免费观看不卡视频| 岛国精品一区免费视频在线观看| 91av成人日本不卡三区| 亚洲色图欧美激情| 国产h视频免费观看| 99re视频在线| 日韩高清成人| 一本视频精品中文字幕| 中文字幕在线永久在线视频2020| 91精品国产91欠久久久久| 国产精品第一区| 99视频有精品视频免费观看| 国产成人综合在线视频| 婷婷成人综合| 日韩精品无码不卡无码| 任我操在线视频| 高清无码一本到东京热| 欧美精品在线看| 国产欧美在线观看精品一区污| 这里只有精品免费视频| 亚洲成人网在线观看| 婷婷五月在线| 亚洲欧美成人在线视频| 国产成人精品一区二区秒拍1o| 中文字幕在线免费看| 免费无码又爽又黄又刺激网站| 一区二区三区四区精品视频| 久久亚洲国产视频| 亚洲国产精品成人久久综合影院| www精品久久| 1769国产精品视频免费观看| 久久久91人妻无码精品蜜桃HD| 色婷婷色丁香| swag国产精品| 国产真实乱人视频| 欧美激情视频二区三区| 亚洲国产成人在线| 国产在线拍偷自揄观看视频网站| 一本大道香蕉中文日本不卡高清二区| 91美女视频在线| 乱人伦中文视频在线观看免费| JIZZ亚洲国产| 久久综合色88| 国产欧美日韩免费| 亚洲欧美日韩久久精品| 国产精品永久免费嫩草研究院| 天天躁日日躁狠狠躁中文字幕| 天天摸天天操免费播放小视频| 高潮爽到爆的喷水女主播视频| 精品三级网站| 91久久天天躁狠狠躁夜夜| 午夜福利免费视频| 色综合中文字幕| 欧美日韩免费在线视频| 亚洲国产成人自拍| 婷婷亚洲最大| 国产成人精品在线| 亚洲成a人片77777在线播放| 国产精品区网红主播在线观看| www.99精品视频在线播放| 就去色综合| 国产亚洲高清视频| 亚洲自拍另类| 久久久久免费看成人影片| 亚洲第一区在线| 在线a网站| 国产精品欧美在线观看| 伊人色婷婷| 国产成人精品视频一区视频二区| 在线观看国产黄色| 91精品免费高清在线| 国产成年女人特黄特色毛片免| 亚洲第七页| 亚洲中文制服丝袜欧美精品| 91午夜福利在线观看| 国产网站一区二区三区| 亚洲综合色婷婷中文字幕| 精品综合久久久久久97超人|