亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于嵌入式的socket編程及其應(yīng)用

        2015-11-10 13:13:53任安虎李鵬飛
        物聯(lián)網(wǎng)技術(shù) 2015年10期
        關(guān)鍵詞:嵌入式

        任安虎 李鵬飛

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

        關(guān)鍵詞:socket編程;TCP/IP協(xié)議;嵌入式;ARM微處理器;Linux操作系統(tǒng);應(yīng)用程序編程接口

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

        0 引 言

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

        使用搭載ARM9架構(gòu)的S3C2440微處理器和DM9000系列網(wǎng)卡的TX2440A開發(fā)板,并在其上移植Linux系統(tǒng),該系統(tǒng)具有優(yōu)秀的網(wǎng)絡(luò)功能,被廣泛應(yīng)用于嵌入式領(lǐng)域[2]。將ARM開發(fā)板作為客戶端,PC作為服務(wù)器,通過socket編程使ARM平臺與PC端建立通信,關(guān)鍵源碼及詳細(xì)解釋將在最后給出。

        1 Socket編程原理及API函數(shù)簡介

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

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

        2 客戶端在ARM上的移植

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

        客戶端應(yīng)用程序的主要源代碼如下:

        ……

        int port = atoi(args[2]);

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

        struct sockaddr_in addr; //定義一個IP地址的結(jié)構(gòu)

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

        addr.sin_family = AF_INET; //設(shè)置結(jié)構(gòu)地址類型為TCP/IP地址

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

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

        //調(diào)用connect連接到結(jié)構(gòu)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) //發(fā)送buf的數(shù)據(jù)

        ……

        if (recv(st, s, sizeof(s), 0) > 0) //如果接收數(shù)據(jù)失敗,循環(huán)break

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

        ……

        }

        close(st); //關(guān)閉socket

        ……

        由程序可以看出,客戶端首先創(chuàng)建一個套接字和一個結(jié)構(gòu)體sockaddr保存服務(wù)器網(wǎng)絡(luò)信息,然后調(diào)用connect函數(shù)將套接字連接到該結(jié)構(gòu)體指定的IP地址和端口號,連接成功后建立一個字符串s,以死循環(huán)的模式讀取鍵盤輸入寫入s,并調(diào)用send函數(shù)將s發(fā)送出去,然后調(diào)用recv函數(shù)從服務(wù)器端接收消息。如果接收數(shù)據(jù)失敗,則退出循環(huán),關(guān)閉套接字。

        3 服務(wù)器端在PC上的建立

        使用Microsoft visual stdio 2013作為開發(fā)編譯環(huán)境,界面友善,功能強大。

        服務(wù)器端應(yīng)用程序主要源代碼如下:

        ……

        //加載socket庫函數(shù)

        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(“l(fā)oad socket function success?。躰”);

        ……

        //將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是阻塞調(diào)用,

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

        {

        ……

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

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

        }

        else

        {

        ……

        }

        }

        close(client_st); //關(guān)閉client端socket

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

        ……

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

        4 嵌入式設(shè)備與計算機的網(wǎng)絡(luò)連接

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

        相信結(jié)合程序模型圖,以及上面章節(jié)對原理和源碼的介紹,讀者很容易的理解網(wǎng)絡(luò)中客戶端和服務(wù)器收發(fā)數(shù)據(jù)的原理和流程。下面給出客戶端和服務(wù)器端應(yīng)用程序?qū)嶋H在兩個平臺上運行的結(jié)果演示。

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

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

        圖1 TCP/IP程序模型圖

        圖2 服務(wù)器打開

        圖3 客戶端連接服務(wù)器

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

        圖4 服務(wù)器與客戶端通信

        5 結(jié) 語

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

        參考文獻

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

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

        [3]王堃,于悅,張玉華,等. 面向物聯(lián)網(wǎng)應(yīng)用平臺的Socket設(shè)計與優(yōu)化[J].吉林大學(xué)學(xué)報(工學(xué)版),2012,42(S1):290-294.

        [4]鄧全良.Winsock網(wǎng)絡(luò)程序設(shè)計[M].北京:中國鐵道出版社,2002:36-38.

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

        [6]郭東升,田秀華.Linux環(huán)境下基于Socket的網(wǎng)絡(luò)通信[J].軟件導(dǎo)刊,2009,8(1):116-118.

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

        [8]劉赟. Winsock技術(shù)在網(wǎng)絡(luò)通信系統(tǒng)中的應(yīng)用[J].西南科技大學(xué)學(xué)報,2013,28(2):88-92.

        猜你喜歡
        嵌入式
        Focal&Naim同框發(fā)布1000系列嵌入式揚聲器及全新Uniti Atmos流媒體一體機
        TS系列紅外傳感器在嵌入式控制系統(tǒng)中的應(yīng)用
        電子制作(2019年7期)2019-04-25 13:17:14
        基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
        嵌入式系統(tǒng)通信技術(shù)的應(yīng)用
        電子制作(2018年18期)2018-11-14 01:48:16
        嵌入式PLC的設(shè)計與研究
        電子制作(2018年16期)2018-09-26 03:27:18
        搭建基于Qt的嵌入式開發(fā)平臺
        基于嵌入式系統(tǒng)Windows CE的應(yīng)用程序開發(fā)
        嵌入式單片機在電機控制系統(tǒng)中的應(yīng)用探討
        電子制作(2017年8期)2017-06-05 09:36:15
        嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
        Altera加入嵌入式視覺聯(lián)盟
        国产农村妇女精品一区| 8090成人午夜精品无码| 国产一区二区免费在线观看视频| 虎白m粉嫩小在线播放| 7m精品福利视频导航| 国内大量揄拍人妻在线视频| 美女视频永久黄网站免费观看国产| 伊人久久亚洲精品中文字幕| 97se狠狠狠狠狼鲁亚洲综合色| 后入内射欧美99二区视频| 人妻系列无码专区久久五月天| 在线观看的a站免费完整版| 无套中出丰满人妻无码| 国产精品卡一卡二卡三| 人妻系列影片无码专区| 亚洲国产精品悠悠久久琪琪| 亚洲色成人网站www永久| 无码欧亚熟妇人妻AV在线外遇| 一本一道久久a久久精品综合蜜桃| 二区免费在线视频观看| 亚洲一卡2卡3卡4卡5卡精品| 四虎国产精品视频免费看| 大岛优香中文av在线字幕| 国产成人综合久久久久久| 欧美gv在线观看| 亚洲A∨日韩Av最新在线| 欧美日韩a级a| 日韩精品一区二区亚洲专区| 久久理论片午夜琪琪电影网| 欧洲-级毛片内射| 亚洲中文字幕无线乱码va| 在线播放亚洲丝袜美腿| 亚洲精品乱码久久久久久蜜桃不卡 | 中文字幕亚洲精品第一页| 公厕偷拍一区二区三区四区五区| 人妻av乱片av出轨| 国产91一区二这在线播放| 中文字幕一区二三区麻豆| 最新国产精品久久精品| 欧美成人a在线网站| 国产亚洲日本精品二区|