socket通信范文
時間:2023-03-30 03:41:55
導語:如何才能寫好一篇socket通信,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公務員之家整理的十篇范文,供你借鑒。
篇1
計算機網(wǎng)絡時代的到來推動了很多產(chǎn)業(yè)的發(fā)展升級,將計算機網(wǎng)絡技術應用到各行各業(yè)中是當前的發(fā)展潮流。計算機的網(wǎng)絡具有靈活性、開放性,網(wǎng)絡本身不受企業(yè)或廠商的控制,所以在許多行業(yè)都能夠發(fā)揮其價值。網(wǎng)絡編程是應用網(wǎng)絡發(fā)揮其價值的一個重要方式,而掌握SOCKET網(wǎng)絡編程技術能夠?qū)崿F(xiàn)網(wǎng)絡通信的效能。本文就BSD Unix網(wǎng)絡版在套接字接口之上的網(wǎng)絡通信過程展開了分析討論。
一、TCP/IP協(xié)議在分層以及應用程序編程接口
基于TCP/IP的網(wǎng)絡能夠為應用程序供應兩個常規(guī)編程接口,分別為套接字接口和傳輸層接口,套接字接口便是本文所重點討論的SOCKET,SOCKET是在BSD Unix系統(tǒng)的基礎上開發(fā)并普及開的,傳輸層接口(TLI)是AT&T公司開發(fā)出的,SOCKET API具有普遍的通用性,能夠基于多種傳輸協(xié)議運行,當前已經(jīng)發(fā)展成了網(wǎng)絡編程的既定事實標準,所以本文就通用性只討論套接字接口編程。
二、TCP/IP提供的服務以及編程模式
套接字實際上是IP地址在附上端口編號后,IP地址的標識網(wǎng)絡中單一主機,端口編號的標識能夠在主機之上展開工作的一個進程,能夠系統(tǒng)化展開網(wǎng)間通信則需要建立在兩個進程中,達成這一條件還需要共用相同的高層協(xié)議。
OSI術語里把網(wǎng)絡層下面的各分層視為通信子網(wǎng),為實現(xiàn)網(wǎng)間的進程通信,在此基A上還要做到控制差錯、控制流量、管理各項連接、排序組合數(shù)據(jù)等功能,這就需要準備兩種服務方式,分別為無連接的服務和面向連接(虛電路)。
TCP/IP網(wǎng)絡應用中,進行通信工作的兩個進程之間會互相產(chǎn)生作用和聯(lián)系,為用戶供應所需求的服務,然后將數(shù)據(jù)回復到客戶的結果。
三、BSD Unix套接字接口網(wǎng)間進程的通信過程
SOCKET在TCP/IP基礎上所能夠提供的套接字類型主要有一下三種:
3.1流式套接字(SOCK STREAM)
流式套接字所提供的服務在連接上的應用比較多,能夠為用戶提供準確可靠的數(shù)據(jù)傳輸服務,并且保證了數(shù)據(jù)避免出錯,同時還也能夠避免多次重復發(fā)送,數(shù)據(jù)在傳輸過程中仍保持著隊列順序,對于數(shù)據(jù)還有準確的流量控制,防止了數(shù)據(jù)流超出限制值的出現(xiàn)。
3.2數(shù)據(jù)報式套接字(SOCK DGRAM)
數(shù)據(jù)報式套接字能夠為用戶提供無連接服務,獨立的服務包傳送出,對于錯誤沒有保證,數(shù)據(jù)在傳輸?shù)倪^程中可能會丟失或出現(xiàn)重復發(fā)送的現(xiàn)象,另一端接受到的數(shù)據(jù)也是雜亂無序的,數(shù)據(jù)長度有限制:最大為64KB,網(wǎng)絡文件系統(tǒng)中(NFS)使用的便是數(shù)據(jù)報式套接字。
3.3原始式套接字(SOCK RAW)
原始式套接字的接口要求能夠?qū)崿F(xiàn)對底層協(xié)議間的信息傳輸,比如IP、ICMP的直接訪問,這種訪問常常用在對新的協(xié)議實現(xiàn)情況以及訪問服務配置中的新設備的檢驗工作中,通常是不會為普通用戶提供的,所以本文并未展開深入研究。
四、總結
本文針對以SOCKET在編程上的應用展開的了分析討論,并對其在網(wǎng)絡通信功能的應用進行了研究。網(wǎng)絡編程是應用網(wǎng)絡發(fā)揮其價值的一個重要方式,而掌握SOCKET網(wǎng)絡編程技術能夠?qū)崿F(xiàn)網(wǎng)絡通信的效能。本文就BSD Unix網(wǎng)絡版在套接字接口之上的網(wǎng)絡通信過程展開的研究仍不全面,需要更多的計算機網(wǎng)絡技術人員投入,深入的研究并將其應用于網(wǎng)絡通信領域。
參 考 文 獻
[1]歐軍,吳清秀,裴云,張洪. 基于socket的網(wǎng)絡通信技術研究[J]. 網(wǎng)絡安全技術與應用,2011,07:19-21.
[2]王遠洋,周淵平,郭煥麗. Linux下基于socket多線程并發(fā)通信的實現(xiàn)[J]. 微計算機信息,2009,15:70-72.
[3]王志偉,沈杰峰,郭啟峰,唐俊. 基于Socket的GPRS遠程數(shù)據(jù)采集方法[J]. 西華大學學報(自然科學版),2006,01:37-39+93+3.
篇2
關鍵詞:套接字;嵌入式Linux;網(wǎng)絡通信;TCP/IP協(xié)議
中圖分類號:G642.0 文獻標志碼:A 文章編號:1674-9324(2017)30-0274-02
一、引言
隨著數(shù)字信息技術和網(wǎng)絡技術的高速發(fā)展,嵌入式技術已經(jīng)廣泛應用到各個領域、各類產(chǎn)業(yè)以及人們的日常生活等各方面,成為引人矚目的熱點。為適應嵌入式和網(wǎng)絡應用需求,標準的一種或多種網(wǎng)絡通信接口成為嵌入式系統(tǒng)的必備需求,需要TCP/IP協(xié)議支持。而socket是TCP/IP網(wǎng)絡最為通用的API,計算機可以通過這個端口與任何具有socket接口的設備通信。
二、socket簡介
TCP/IP是一組支持網(wǎng)絡通信的協(xié)議系統(tǒng),其協(xié)議參考模型分4層:網(wǎng)絡接口層、互聯(lián)網(wǎng)層、傳輸層和應用層。網(wǎng)絡通信中一個非常重要的概念就是套接字(socket),它是介于網(wǎng)絡應用層和傳輸層之間的編程接口,在Linux網(wǎng)絡層次模型中的位置如圖1所示。套結字利用IP地址與端口號與Internet中的網(wǎng)絡進程一一對應,進而實現(xiàn)網(wǎng)絡通信。最常使用的socket有兩種:(1)數(shù)據(jù)流式socket(SOCK-STREAM),使用TCP協(xié)議,提供面向連接的可靠通信流;(2)數(shù)據(jù)報式socket(SOCK-DGRAM),使用UDP協(xié)議,提供無連接的服務,并且不保證可靠、無差錯。本文所使用的是流式套接字。
三、socket通信的設計與實現(xiàn)
1.socket通信過程。網(wǎng)絡程序具備Client/Server結構。下面分TCP Client端及TCP Server端為說明TCP網(wǎng)絡程序的流程,如圖2所示。
Server端啟動后,先調(diào)用socket()函數(shù)建立socket,其次通過bind()函數(shù)綁定socket和本地IP地址,然后調(diào)用listen()函數(shù)做好偵聽準備,再調(diào)用accept()函數(shù)進行接收。Client端建立socket后,通過connect()函數(shù)和Server端建立連接。之后即可調(diào)用send()和recv()來實現(xiàn)發(fā)送和接收。關閉socket通過調(diào)用close()來實現(xiàn)。
2.socket通信的實現(xiàn)。本實驗PC機上安裝的是Redhat 9.0版本的Linux操作系統(tǒng),嵌入式實驗平臺采用三星S3C2410微處理器,嵌入式操作系統(tǒng)內(nèi)核版本為2.4.18。分別編寫服務器端應用程序server.c和客戶端應用程序client.c,實現(xiàn)網(wǎng)絡通信,程序流程圖如圖3、圖4所示。
四、結果分析
設置PC機和目標平臺的IP地址分別為:192.168.1.20和192.168.1.22。PC機Linux終端和目標平臺分別運行Server和client程序,通過超級終端觀察到運行結果如圖5所示,可見PC機與目標平臺成功建立連接,實現(xiàn)通信,達到了預期目標。
五、結語
研究socket通信對開發(fā)具有網(wǎng)絡功能的嵌入式產(chǎn)品有著非常重要的作用。本文的實現(xiàn)對于嵌入式產(chǎn)品的網(wǎng)絡應用是一個很好的探索,對于同類系統(tǒng)的設計具有實際的參考和推廣價值。嵌入式系統(tǒng)與網(wǎng)絡的結合,必然使其具有更加廣闊的應用空間。
參考文獻:
[1]劉崢嶸.嵌入式Linux應用開發(fā)詳解[M].北京:機械工業(yè)出版社,2004:394-433.
篇3
(吉林大學物理學院,吉林長春130012)
摘要:為了適應在復雜實驗條件下對多個電源單元的管理控制,設計基于Socket網(wǎng)絡通信的多電源單元管理系統(tǒng)。為了對多電源單元的高效管理,Socket網(wǎng)絡通信采用的是異步通信連接,同步通信的通信模式,同時存儲電源數(shù)據(jù)(電壓、電流)到excel文件,方便查閱與記錄。實驗證明這種方式比單獨異步或者單獨同步通信方式都高效、準確。
關鍵字:C#;Socket;異步通信;同步通信;數(shù)據(jù)保存
中圖分類號:TN86?34 文獻標識碼:A 文章編號:1004?373X(2015)20?0137?03
收稿日期:2015?05?12
Multi?power management system based on Socket communicationXI Yongguang,F(xiàn)U Chengwei
(School of Physics,Jilin University,Changchun 130012,China)
Abstract:To suit the management and control of multi?power units under the complex experiment condition,a multi?powerunit management system based on the Socket network communication was designed. For the efficient management foe multi?powerunit,the asynchronous communication connection and synchronous communication are adopted in Socket network communica?tion,and the power data(voltage,current)are stored in Excel file. It is convenient to check and record. The experimental re?sults show that this method is more efficient and accurate than only asynchronous communication mode or synchronous communi?cation mode.
Keywords:C #;Socket;asynchronous communication;synchronous communication;data preservation
為了適應在復雜實驗條件下對多個電源單元的有效管理,運用C#語言編寫了基于Socket 網(wǎng)絡通信的多電源管理系統(tǒng),并且能把每臺電源單元的數(shù)據(jù)保存到Excel 表格中,方便查閱與記錄。Socket 通信的同步通信方式是在客戶端在發(fā)送請求之后必須等到服務器回應之后才可以發(fā)送下一條請求,是阻塞通信方式。這樣的方式對于電源單元的管理比較準確。但對于多個電源單元同時管理時,就會出現(xiàn)連接長時間通信不上的問題。而異步連接就能很好的解決多個單元的連接問題,但是異步通信的缺點是對多電源單元管理時會出現(xiàn)數(shù)據(jù)錯亂的問題。本系統(tǒng)使用面向?qū)ο驝#編程,采用了Socket 異步連接電源,同步通信收/發(fā)數(shù)據(jù)方式進行設計,很好地滿足了多電源管理系統(tǒng)的要求。
1 系統(tǒng)設計
1.1 Socket通信原理
1.1.1 服務器端的步驟
(1)在實用Socket之前,要首先初始化Socket,就是實用Socket初始化函數(shù);
(2) 在初始化完成以后,就可以建立服務端的Socket,然后實用該Sokcet開始偵聽整個網(wǎng)絡中的連接請求;
(3)當檢測到來自客戶端的連接請求時,向客戶端發(fā)送收到連接請求的信息,并建立與客戶端的連接;
(4)在通信的過程中,服務器端產(chǎn)生的Socket會通過一個消息響應函數(shù)OnReceive來接收到達的數(shù)據(jù),數(shù)據(jù)的發(fā)送可以使用Send()來完成;
(5)當完成通信后,服務器關閉與客戶端的Socket連接。
1.1.2 客戶端的步驟
(1)同樣的,初始化Socket,并建立客戶端的Socket,確定要連接的服務器的主機名和端口;
(2)發(fā)送連接請求到服務器,并等待服務器的回饋信息;
(3)連接成功后,與服務器進行數(shù)據(jù)的交互;
(4) 數(shù)據(jù)的讀取同服務端一樣,也是通過OnRe?ceive函數(shù)來完成的,數(shù)據(jù)的發(fā)送通過Send函數(shù)即可;
(5)數(shù)據(jù)處理完畢后,關閉自身的Socket連接。
1.2 Socket異步通信與同步通信
(1)異步通信方式
程序執(zhí)行到發(fā)送、接收和監(jiān)聽語句的時候,不論工作是否完成,都會繼續(xù)往下執(zhí)行。并且在服務端不存時,仍然能繼續(xù)進行后繼工作的。
(2)同步通信方式
Socket 通信用TCP 協(xié)議進行編程時程序執(zhí)行到發(fā)送、接收和監(jiān)聽語句時,在未完成工作前不再繼續(xù)往下執(zhí)行,即處于阻塞狀態(tài),直到該語句完成某個工作后才繼續(xù)執(zhí)行下一條語句。并且服務端不存、從而在拋出異常之前,是無法繼續(xù)進行后繼工作的。
1.3 主要設計思路
1.3.1 采用同步通信方式
同步通信方式如圖1所示。
1.3.2 采用異步通信方式
異步通信方式如圖2所示。
1.3.3 采用異步連接,同步通信的方式
電源管理系統(tǒng)界面,根據(jù)每個電源的IP 地址,端口,通過網(wǎng)口進行異步通信的連接,然后在界面上輸入需要的電源電壓電流數(shù)據(jù),通過同步通信方式進行收/發(fā)數(shù)據(jù),進而完成對電源的控制。管理界面還能保存電源的電壓電流變化的數(shù)據(jù),方便以后查驗。
(1)Socket異步連接電源部分程序
2 實際測試
2.1 采用同步通信方式
測試過程中出現(xiàn),在一個電源單元數(shù)據(jù)通信完成后,才能和下一個電源單元進行通信的情況。這樣的管理系統(tǒng)只能每次處理一個電源單體,不能實現(xiàn)對多電源管理的問題。
2.2 采用異步通信方式
在實驗測試過程中,能夠同時和多個電源單元進行通信,但是在通信過程中出現(xiàn)數(shù)據(jù)錯亂和數(shù)據(jù)發(fā)送延遲的問題。
2.3 采用異步連接,同步通信的方式
實驗測試,對電源單元和多電源單元進行多批次長時間的測試,系統(tǒng)是高效、準確的,數(shù)據(jù)保存也是實時準確的,如圖4所示。
3 結語
多電源單體管理系統(tǒng)能對多臺電源進行高效準確地管理,優(yōu)點有:
(1)在復雜的實驗條件下,能實時高效準確地管理多個電源單元,能極大地簡化實驗過程,讓實驗更加高效精確。
(2)能在遠距離條件下,方便實驗人員操作復雜的電路實驗。
(3) 能實時精確地保存數(shù)據(jù),方便數(shù)據(jù)的記錄和計算。
參考文獻
[1] 周晟,金甌,賀建飚,等.基于Socket的異構形平臺的網(wǎng)絡通信研究[J].計算機與數(shù)字工程,2006(5):4?8.
[2] STEVENS W R.TCP?IP 詳解卷一:協(xié)議[M].北京:機械工業(yè)出版社,2000.
[3] 張文,趙子銘.P2P網(wǎng)絡技術原理與C++開發(fā)案例[M].北京:人民郵電出版社,2008.
[4] 馬駿.C#程序設計及應用教程[M].北京:人民郵電出版社,2009.
[5] JONES A,OHLUND J.Windows網(wǎng)絡編程[M].北京:清華大學出版社,2002.
[6] 任柯.ZigBee多媒體教室電源管理系統(tǒng)設計與實現(xiàn)[J].西南民族大學學報:自然科學版,2012(4):669?673.
[7] 趙勇,黃東,張?zhí)扉_,等.基于μIP和Socket的遠程機房電源控制系統(tǒng)設計[J].電子設計工程,2015(4):40?43.
篇4
關鍵詞:嵌入式;Socket;串口通信;網(wǎng)絡通信
本文的背景是研究通過對攝像頭的遠程控制從而對運動圖像加以采集和處理。該系統(tǒng)的音視頻編解碼部分,是基于Windows系統(tǒng)用VC進行的開發(fā),實現(xiàn)對圖像視頻的編解碼處理,攝像頭的遠程控制系統(tǒng)主要是通過Linux系統(tǒng)設計。統(tǒng)通過串口和網(wǎng)絡進行傳輸和控制。系統(tǒng)采用C/S模型,PC機作為client端,根據(jù)采集到的數(shù)據(jù)進行編解碼后,發(fā)送出對攝像頭的控制命令,通過網(wǎng)絡傳輸?shù)紸RM9平臺上,ARM平臺作為server端在接收到client端發(fā)送的命令后,通過串口發(fā)送命令來控制攝像頭。
1 串口通信
1.1 Linux下串口通信基本原理
Linux系統(tǒng)將設備和文件的操作都作為對文件的處理,所以對設備的操作,內(nèi)核會返回一個文件描述符,需要將其作為參數(shù)傳給相對應的函數(shù)。Linux中所有的設備文件都放在“/dev”目錄下,通過“ttyS+編號”命名相應的串口資源,所以對應路徑是“/devttyS*”。因而可以相對文件讀寫那樣訪問一個串口設備。
1.2 Linux下的串口設置
首先要對串口進行設置,在termios.h完成對波特率等的設置。
struct termios
{tcflag t c iflag;
tcflag t c oflag;
tcflag t c cflag;
tcflag t c lflag;
cc t c cc [NCCS];
};
open()函數(shù):int fd = open ("/dev/ttyS *", O RDWR|O NOCTTY|O NDELA Y);
然后調(diào)用read()和write()函數(shù)讀寫端口,返回實際讀寫的字節(jié)數(shù),如果有錯誤發(fā)生則返回-1。
讀取串口結束后,首先恢復串口原始屬性,然后才可以關閉串口并退出程序。
1.3 串口控制應用程序
下面給出本系統(tǒng)中一個通過串口控制攝像頭的函數(shù)的一部分結構:
void sendMsg(int pan,int tilt)
{struct timeval timeout;
static char *driver = "/dev/ttyS1";
timeout.tv_sec = 0;
timeout.tv_usec = 0;
formCmd(buf,pan,tilt);
fd = uart_open(driver,B9600);
write(fd,buf,16);
close(fd);
}
2 網(wǎng)絡通信
2.1 Socket基本原理介紹
Socket是一種通信機制,客戶/服務器系統(tǒng)既可以在本地單機上運行,也可以在網(wǎng)絡中運行。
首先需要了解socket中的一些重要函數(shù):
1) 創(chuàng)建Socket:int socket( intdomain, inttype, intprotocol);
2) 配置Socket:bind函數(shù)指定本地信息int bind( intsocket, const structsockaddr* address, size_taddress_len);
3) 使用listen( )和accept( )函數(shù)獲取遠端信息:
Int listen(int socket, int backlog);
Int accept(int socket, struct sockaddr* address, size_t* address_len);
4) 通信處理:send( ),write( ),recv( ),read( )。
5) 通信結束:使用closesocket( )。
2.2 Windows和Linux下socket應用程序
客戶端程序:創(chuàng)建一個未命名的套接字,然后把它連接到服務器套接字server_socket上,向服務器寫一個字符,再讀回經(jīng)服務器處理后的一個字符。
服務器端程序:首先創(chuàng)建一個服務器套接字,綁定到一個名字,然后創(chuàng)建一個監(jiān)聽隊列,接收來自客戶程序的連接。
下面我們分別在Windows和Linux下進行socket編程,實現(xiàn)二者之間的通信,具體函數(shù)實現(xiàn)的主要部分如下:
Windows下作為client端:
{
SocketClient=socket(AF_INET,SOCK_STREAM,0);
addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.10");
while(1)
send(SocketClient,sendBuffer,16,0);
closesocket(SocketClient);
WSACleanup();
}
Linux下作為server端:
{
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
server_address.sin_addr.s_addr = inet_addr("192.168.1.10");
bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
listen(server_sockfd, 5);
client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);
while(1)
read(client_sockfd, str,16);
close(client_sockfd);
}
3 結束語
本文設計了基于嵌入式平臺上可移動攝像頭遠程控制,對串口通信和網(wǎng)絡通信的原理和機制加以闡述,對串口驅(qū)動和網(wǎng)絡驅(qū)動的編寫提出了具體的方法,并且在實際的操作應用中給出了具體函數(shù)的編寫。本文所提供的處理方法已在實際的項目中的得到應用,對于其他的通過串口通信和網(wǎng)絡通信控制的設備,具有參考意義,今后我們還將展開進一步的相關研究。
參考文獻:
[1] 劉智國,張海春.基于S3C2410的嵌入式串口通信設計[J].微計算機信息(嵌入式與SOC),2009,25(4-2).
篇5
關鍵詞:網(wǎng)絡控制器;通信協(xié)議;Rabbit2000單片機;套接字;串口通信
中圖分類號:TN91 文獻標識碼:B
文章編號:1004373X(2008)0105403オ
Communication Technology of Jia-xiao-tong Network Controller
WEI Zi,YANG Qingjiang,ZHANG Guanglu
(Heilongjiang Institute of Science and Technology,Harbin,150027,China)
オ
Abstract:For the function demand of the network controller in Jia-xiao-tong system,the paper proposes a communication technology of combining serial-port with network.Firstly,it describes the network controller′s hardware platform and the application-layer protocol based on TCP/IP protocol stack.Then,it mainly discusses the communication network technology and the communication serial technology.The polling scheme is applied to improve data transfer effectiveness and reduce data collision.Finally,it explains and analyzes the communication technology′s feasibility and stability through filed test data.
Keywords:network controller;communication protocol;Rabbit2000 single chip;socket;serial communication
オ
1 引 言
隨著TCP/IP等網(wǎng)絡通信的出現(xiàn),將串口通信與網(wǎng)絡通信相結合的趨勢越來越明顯,這是保護使用者既往投資和整體利益的一種有效辦法。本文所討論的通信技術就是將串口與網(wǎng)絡通信相結合并在實際應用中取得良好效果的一種通信解決方案。
“家校通”是利用現(xiàn)代信息技術實現(xiàn)家庭與學校實時溝通的教育網(wǎng)絡平臺,其組成部分為:家?;ヂ?lián)卡、讀卡器、無線網(wǎng)關、網(wǎng)絡控制器、短信發(fā)射接收機。網(wǎng)絡控制器的主要功能是通過無線網(wǎng)關從讀卡器獲取信息,并與互聯(lián)網(wǎng)服務平臺進行網(wǎng)絡通信,是家校通系統(tǒng)的核心。
2 網(wǎng)絡控制器的硬件平臺
根據(jù)網(wǎng)絡控制器的功能要求,考慮整體的性能、價格方面,CPU采用Rabbit2000單片機,他是Z-World公司特別為中小型控制器而設計的高性能8位微處理器。編譯環(huán)境為Dynamic C,提供Socket級TCP/IP編程。網(wǎng)絡控制器的硬件結構如圖1所示。
3 應用層通信協(xié)議
3.1 網(wǎng)絡控制器與讀卡器的串口通信協(xié)議
網(wǎng)絡控制器與讀卡器的通信主要通過異步串行RS 485接口,基于通用串行通信RS 485數(shù)據(jù)傳輸單元(字節(jié)格式)有不帶校驗位的10 b和帶奇偶校驗位的11 b兩種數(shù)據(jù)格式。為了提高數(shù)據(jù)傳送的效率和可靠性,采用無奇偶校驗位的10 b數(shù)據(jù)格式,并由BBC校驗生成校驗碼與數(shù)據(jù)一起發(fā)送。
開始標志讀卡器地址信息長度命令和參數(shù)校驗
2 B1 B2 B14 B1 B
(3)命令字:
A1:從讀卡器讀取一條記錄。
A2:控制器正確接收記錄信息后,返回更新記錄的讀地址命令,使地址指針指向下一條記錄。
A4:設置校正讀卡器時間。
A6:測試控制器與讀卡是否正常通信。
3.2 網(wǎng)絡控制器與服務平臺的網(wǎng)絡通信協(xié)議
網(wǎng)絡協(xié)議通常分不同的層次進行開發(fā),每一層分別負責不同的通信功能。TCP/IP通常是一個4層協(xié)議,包括數(shù)據(jù)鏈路層、網(wǎng)絡層(含IP協(xié)議)、傳輸層(含TCP協(xié)議)和應用層。本網(wǎng)絡協(xié)議就是基于TCP/IP協(xié)議之上的應用層協(xié)議,采用請求應答的通信模式??紤]到協(xié)議的可靠性和實現(xiàn)的方便性,數(shù)據(jù)采用ASCII碼表示。
(1)報文組成
4 通信技術
控制器建立socket連接后,向服務器發(fā)送連接請求和數(shù)據(jù)傳輸,并實時判斷連接的有效性,在有效連接的狀態(tài)下,實現(xiàn)控制器、服務器、讀卡器三者的正常通訊,程序流程如圖2所示。
4.1 網(wǎng)絡通信技術的實現(xiàn)
socket初始化: 首先要對RTL8019AS的控制寄存器進行初始化配置,Dynamic C已將這部分配置封裝成函數(shù)放入REALTEK.LIB庫中,應用時只需調(diào)用相關函數(shù)。之后再調(diào)用函數(shù)庫dcrtcp.lib中的幾個簡單函數(shù)可完成socket的初始化,以下是程序的主體框架。
#define TCPCONFIG1
#memmapxmem
#usedcrtcp.lib
main()
{
sock[CD#*2]init( );
while(ifpending(IF[CD#*2]DEFAULT)==IP[CD#*2]COMING[CD#*2]UP)
tcp[CD#*2]tick(NULL);
tcp[CD#*2]open(&socket,0,destIP,sockport,null);
…… ……
}
在建立TCP的連接中,Dynamic C有兩種方法打開TCP socket:一種是被動的方式,調(diào)用函數(shù)tcp[CD#*2]listen(),等待客戶端進行連接;一種是主動的方式,調(diào)用函數(shù)tcp[CD#*2]open(),根據(jù)相應的參數(shù)(IP地址和端口號)主動連接到服務器端。本通信技術采用的就是主動方式(作為客戶端)。
Socket數(shù)據(jù)的發(fā)送與接收:數(shù)據(jù)發(fā)送調(diào)用sock[CD#*2]write(&socket,str[CD#*2]send,str[CD#*2]send[CD#*2]len)。在讀取socket緩沖區(qū)數(shù)時,先判斷緩沖區(qū)中是否有數(shù)據(jù),有數(shù)據(jù)再進行讀操用,同時有超時設置。
start[CD#*2]time=SEC[CD#*2]TIMER;
/*SEC[CD#*2]TIMER為秒級系統(tǒng)時間*/
end[CD#*2]time=start[CD#*2]time;
while((end[CD#*2]time
!recv[CD#*2]count)/*READ[CD#*2]TIME為設定的等待時間*/
{
str[CD#*2]recvbuf[CD#*2]len=sock[CD#*2]bytesready(&socket);
/*判斷socket讀緩沖區(qū)是否有數(shù)據(jù)*/
if(str[CD#*2]recvbuf[CD#*2]len>0)
recv[CD#*2]count=sock[CD#*2]read(&socket,str[CD#*2]recvbuf,
str[CD#*2]recvbuf[CD#*2]len); /*讀socket*/
}
if(revc[CD#*2]count)
{…… ……}
/*拆分接收到的命令字,讀取有效信息*/
else
break;
4.2 串口通信技術的實現(xiàn)
主要包含3個步驟:命令字的組合,設置串口D,通過設置Rabbit2000的PE3來控制數(shù)據(jù)的發(fā)送與接收。以A6命令為例,程序主體框架如下:
command[0]=0xA6;/*A6命令*/
create[CD#*2]command(addr,command,pack);
/*組合命令字*/
serDopen(9600);/*9600為波特率*/
send[CD#*2]command(command,returnlen);/*發(fā)送數(shù)據(jù)*/
read[CD#*2]command(readbuf,sizeof(readbuf),10);
/*接收數(shù)據(jù)*/
void send[CD#*2]command(char *pack,int len)
{
int i;
WrPortI(PEDR,& PEDRShadow,0x08);
WrPortI(PEB3R,NULL,0);
for(i=0;i
serDputc(pack[i]);
}
int read[CD#*2]command(char *buf,int len,int time)
{
int i[CD#*2]return;
WrPortI(PEB3R,NULL,1
i[CD#*2]return=serDread(buf,len,time);
return i[CD#*2]return;
}
5 數(shù)據(jù)采集與分析
網(wǎng)絡控制器聯(lián)網(wǎng)正常運行時,向服務器發(fā)送的一包測試記錄數(shù)據(jù)為:
對數(shù)據(jù)包進行分析:0244為數(shù)據(jù)包的總長度,01為協(xié)議版本號,02為命令字,000003為序列號,21000102*****為設備號,09為數(shù)據(jù)包中的刷卡記錄總數(shù),0080D122為測試卡號,07070414152715為刷卡時間(順序為年周月日時分秒),03為狀態(tài)。
采集從服務器返回的命令:001501020000031,其中
列號,1為正確接收。返回命令格式符合協(xié)議要求,內(nèi)容正確。
網(wǎng)絡控制器向讀卡器發(fā)送的命令(以A6為例): aa ff 01 00 03 a6 41 41 f1,其中aa ff表示本命令為控制器發(fā)給讀卡器,01為讀卡器地址,00 03為數(shù)據(jù)長度,a6為命令字,41 41為測試數(shù)據(jù),f1為校驗位。
采集從讀卡器返回的命令:bb ff 01 00 02 41 41 47 d1 22 07 07 04 14 15 42 17 1 6b 00 00 00,其中bb ff表示本命令為讀卡器發(fā)給控制器,01為讀卡器地址,00 02為數(shù)據(jù)長度,41 41為測試數(shù)據(jù),47為校驗位,之后的為無效數(shù)據(jù)。
6 結 語
基于Rabbit2000實現(xiàn)串口與網(wǎng)絡結合的通信技術可以實時、準確地對數(shù)據(jù)進行處理、發(fā)送與接收。由采集到的數(shù)據(jù)表明數(shù)據(jù)收發(fā)的正確性,證明了本通信技術的可行性與可靠性。本通信技術已在家校通系統(tǒng)中取得了良好的通信效果,并可應用于其他數(shù)據(jù)傳輸系統(tǒng)中,具有廣泛的發(fā)展前景。
參 考 文 獻
[1]Z-World Inc.Rabbit2000 Microprocessor Designer′s Hand-book,2003.
[2]Z-WorldInc.Dynamic C TCP/IP User′s Manual,2003.
[3]林麗,朱宏.基于Rabbit2000的網(wǎng)絡通信技術[J].福建電腦,2005(4):45-46.
篇6
關鍵詞 JAVA,網(wǎng)絡,SOCKET,APPLET
網(wǎng)絡上的系統(tǒng)結構多為客戶/服務器模式,服務器端負責數(shù)據(jù)和圖像等的存儲、維護、管理以及傳遞,客戶端則負責人機界面的操作、送出需求及顯示收回的數(shù)據(jù)。
下面介紹一下如何使用JAVA來進行網(wǎng)絡編程:
1) 由于客戶端通過IE同服務器建立聯(lián)系,所以客戶端使用Applet,服務器端使用Application;
2) 服務器應設置成多線程,應答多個客戶的請求;
3) 兩端通信使用SOCKET機制。
1 Java中輸入/輸出流概念:
過濾流DataInputStream 和DataOutputStream 除了分別作為FilterInputStream 和FilterOutputStream的子類外,還分別實現(xiàn)了接口DataInput 和DataOutput。接口DataInput 中定義的方法主要包括從流中讀取基本類型的數(shù)據(jù)、讀取一行數(shù)據(jù)、或者讀取指定長度的字節(jié)數(shù),如readBoolean() readInt()、readLine()、readFully()等。接口DataOutput中定義的方法主要是向流中寫入基本類型的數(shù)據(jù)或者寫入一定長度的字節(jié)數(shù)組,如writeChar()、writeDouble() DataInputStream可以從所連接的輸入流中讀取與機器無關的基本類型數(shù)據(jù),用以實現(xiàn)一種獨立于具體平臺的輸入方式;DataInputStream 可以向所連接的輸出流寫入基本類型的數(shù)據(jù)。
2 Socket 機制
Socket是面向客戶/服務器模型設計的,網(wǎng)絡上的兩個程序通過一個雙向的通訊連接實現(xiàn)數(shù)據(jù)的交換,這個雙向鏈路的一端稱為一個Socket。 Socket通常用來實現(xiàn)客戶方和服務方的連接??蛻舫绦蚩梢韵騍ocket寫請求,服務器將處理此請求,然后通過Socket將結果返回給用戶。
Socket通信機制提供了兩種通訊方式:有聯(lián)接和無聯(lián)接方式,分別面向不同的應用需求。使用有聯(lián)接方式時,通信鏈路提供了可靠的,全雙工的字節(jié)流服務。在該方式下,通信雙方必須創(chuàng)建一個聯(lián)接過程并建立一條通訊鏈路,以后的網(wǎng)絡通信操作完全在這一對進程之間進行,通信完畢關閉此聯(lián)接過程。使用無聯(lián)接方式時其系統(tǒng)開銷比無聯(lián)接方式小,但通信鏈路提供了不可靠的數(shù)據(jù)報服務,不能保證信源所傳輸?shù)臄?shù)據(jù)一定能夠到達信宿。在該方式下,通信雙方不必創(chuàng)建一個聯(lián)接過程和建立一條通訊鏈路,網(wǎng)絡通信操作在不同的主機和進程之間轉(zhuǎn)發(fā)進行。
3 Java語言
Java語言的優(yōu)點主要表現(xiàn)在:簡單、面向?qū)ο蟆⒍嗑€程、分布性、體系結構中立、安全性等方面。
(1) 簡單性
Java與C++語言非常相近,但Java比C++簡單,它拋棄了C++中的一些不是絕對必要的功能,如頭文件、預處理文件、指針、結構、運算符重載、多重繼承以及自動強迫同型。 Java實現(xiàn)了自動的垃圾收集,簡化了內(nèi)存管理的工作。這使程序設計更加簡便,同時減少了出錯的可能。
(2) 面向?qū)ο?/p>
Java提供了簡單的類機制和動態(tài)的構架模型。對象中封裝了它的狀態(tài)變量和方法,很好地實現(xiàn)了模塊化和信息隱藏;而類則提供了一類對象的原型,通過繼承和重載機制,子類可以使用或重新定義父類或超類所提供的方法,從而既實現(xiàn)了代碼的復用,又提供了一種動態(tài)的解決方案。
Java是一種完全面向?qū)ο蟮某绦蛟O計語言,它除了數(shù)組、布爾和字符三個基本數(shù)據(jù)類型外的其它類都是對象,它不再支持全局變量。在Java中,如果不創(chuàng)建新類就無法創(chuàng)建程序,Java程序在運行時必須先創(chuàng)建一個類的實例,然后才能提交運行。
Java同樣支持繼承特性,Java的類可以從其它類中繼承行為,但Java只支持類的單重繼承,即每個類只能從一個類中繼承。
Java支持界面,界面允許程序員定義方法但又不立即實現(xiàn),一個類可以實現(xiàn)多個界面,利用界面可以得到多重繼承的許多優(yōu)點而又沒有多重繼承的問題。
(3) 多線程
多線程使應用程序可以同時進行不同的操作,處理不同的事件。在多線程機制中,不同的線程處理不同的任務,他們之間互不干涉,不會由于一處等待影響其他部分,這樣容易實現(xiàn)網(wǎng)絡上的實時交互操作。
Java程序可以有多個執(zhí)行線程,如可以讓一個線程進行復雜的計算,而讓另一個線程與用戶進行交互,這樣用戶可以在不中斷計算線程的前提下與系統(tǒng)進行交互。多線程保證了較高的執(zhí)行效率。
(4) 分布性
Java是面向網(wǎng)絡的語言。通過它提供的類庫可以處理TCP/IP協(xié)議,用戶可以通過URL地址在網(wǎng)絡上很方便的訪問其他對象。
(5) 體系結構中立
Java是一種網(wǎng)絡語言,為使Java程序能在網(wǎng)絡的任何地方運行,Java解釋器生成與體系結構無關的字節(jié)碼結構的文件格式。Java為了做到結構中立,除生成機器無關的字節(jié)碼外,還制定了完全統(tǒng)一的語言文本,如Java的基本數(shù)據(jù)類型不會隨目標機的變化而變化,一個整型總是32位,一個長整型總是64位。
為了使Java的應用程序能不依賴于具體的系統(tǒng),Java語言環(huán)境還提供了用于訪問底層操作系統(tǒng)功能的類組成的包,當程序使用這些包時,可以確保它能運行在各種支持Java的平臺上。
java.lang: 一般的語言包。其中包括用于字符串處理、多線程、異常處理和數(shù)字函數(shù)等的類,該包是實現(xiàn)Java程序運行平臺的基本包
java.util: 實用工具包。其中包括哈希表、堆棧、時間和日期等
java.io: 基于流模型的輸入/輸出包。該包用統(tǒng)一的流模型實現(xiàn)了各種格式的輸入/輸出,包括文件系統(tǒng)、網(wǎng)絡和設備的輸入/輸出等
java.net: 網(wǎng)絡包。該包支持TCP/IP協(xié)議,其中提供了socket、URL和WWW的編程接口
java.awt: 抽象窗口工具集。其中實現(xiàn)了可以跨平臺的圖形用戶界面組件,包括窗口、菜單、滾動條和對話框等
java.applet: 支持applet程序設計的基本包
(6) 安全性
用于網(wǎng)絡、分布環(huán)境下的Java必須要防止病毒的入侵,Java不支持指針,一切對內(nèi)存的訪問都必須通過對象的實例變量來實現(xiàn),這樣就防止了程序員使用欺騙手段訪問對象的私有成員,同時也避免了指針操作中容易產(chǎn)生的錯誤。
4 JAVA工具
(1) JDK
1) Java編譯器
Java編譯器將Java源代碼文件編譯成可執(zhí)行的Java字節(jié)碼。Java源代碼文件的擴展名為 .java,Java編譯器把這種擴展名的文件編譯成擴展名為.class的文件。源文件中的每個類在編譯后都將產(chǎn)生一個class文件,這意味一個Java源代碼文件可能編譯生成多個class文件。
2) Java解釋器
Java解釋器對編譯生成的字節(jié)碼格式的可執(zhí)行程序的運行提供支持,它是運行非圖形Java程序的命令行工具。
3) Appletviewer
它是Java Applet的簡單測試工具,可使用它來測試Java Applet程序,而不需要WWW瀏覽器的支持。
(2) Visual J++
Visual J++ 集成了可視化界面設計、交互式調(diào)試、代碼編輯、聯(lián)機幫助信息和介紹如何快速掌握該開發(fā)環(huán)境的實用向?qū)У榷囗椆δ?,同時具有能充分利用Active X和COM新技術的優(yōu)勢。利用Visual J++可創(chuàng)建交互性很強的Internet應用程序,是難得的Java 開發(fā)系統(tǒng)。
5 客戶機/服務器通信的實現(xiàn):
(1) Application 同 Applet 的通信
兩端通過Socket機制進行連接:
1) 客戶端的編程流程:
? 打開Socket,新建一個套接字;
? 為套接字建立一個輸入和輸出流;
? 根據(jù)服務器協(xié)議從套接字讀入或向套接字寫入;
? 清除套接字和輸入/輸出流;
2)服務器端的編程流程:
? 打開Server Socket,創(chuàng)建一個服務器型套接字和一個普通套接字,服務器型套接字在指定端口為客戶端請求的Socket 服務;
? 使用ServerSocket類的accept()方法使服務器型套接字處于監(jiān)聽狀態(tài)并把監(jiān)聽結果返回給普通套接字;
? 為該普通套接字創(chuàng)建輸入和輸出流;
? 從輸入和輸出流中讀入或?qū)懭胱止?jié)流,進行相應的處理,并將結果返回給客戶端;
? 在客戶端和服務器工作結束后關閉所有的對象,如服務器型的套接字,普通套接字,輸入和輸出流。
正是由于Java系統(tǒng)具有基于Socket的靈活通信機制,因而其應用程序能自由地打開和訪問網(wǎng)絡上的對象,就象在本地文件系統(tǒng)中一樣。
(2) Applet之間的通信:
Applet之間的通信使用Applet Context類的getApplet()方法。
只要在程序中加入
Applet oneapplet=getAppletContext().getApplet(“first”);便可使用name為first的Applet中的方法了。
在該課題中大量使用了該種通信方法,因為專門同服務器端通信的 Applet中包含接收信息方法和發(fā)送信息方法,所有客戶端的Applet都要使用負責通信的Applet中的方法,所以客戶端的Applet同負責通信的Applet必須進行通信。
6 程序
//服務器端程序S.java 負責與客戶端通信
import java.io.*;
import java.net.*;
import java.lang.*;
import T2;
class ThreadEchoHandler extends Thread //創(chuàng)建線程
{
T2 theT2=new T2();
Socket incoming;
int counter;
ThreadEchoHandler(Socket i,int c)
{ incoming=i;
counter=c; }
public void run()
{
try
{
DataInputStream in=new DataInputStream(incoming.getInputStream());
DataOutputStream out=new DataOutputStream(incoming.getOutputStream());
System.out.println ("hello");
boolean done=false;
while(!done)
{ String aa="";
String str=in.readUTF(); //從客戶端得到字符串
//在此加入各自的服務程序
System.out.println (str);
theT2.pass(str); //解碼
theT2.tongji(); //修改監(jiān)控庫中的信息
aa=theT2.guan(); //操縱數(shù)據(jù)庫
System.out.println ("string z is:"+aa);
if(aa.compareTo("null")!=0 )
//若是查詢數(shù)據(jù)庫,返回查詢后的結果
{ //若不是查詢數(shù)據(jù)庫,不向客戶端輸出信息
out.writeUTF(aa);
out.flush(); }
}//while
incoming.close(); //線程關閉
}//try
catch(IOException e)
{System.out.println(e);}
}//end run
}
//----------------------------------------
class S
{
public static void main(String[] args)
{
int i=1;
try
{
ServerSocket s=new ServerSocket(1111);
for(;;)
{
Socket incoming=s.accept();
System.out.println("connect: "+i);
new ThreadEchoHandler(incoming,i).start();
i++;
}
}
catch(Exception e)
{ System.out.println(e); }
}
}
//客戶端通信小應用程序 Echo.java
import java.io.*;
import java.net.*;
import java.awt.*;
import java.applet.*;
public class Echo extends Applet
{
TextArea ta;
Socket echoSocket;
DataOutputStream os;
DataInputStream is;
String Line;
public void init()
{
setBackground(Color.white);
ta=new TextArea(5,80);
ta.setEditable(false);
add(ta);
try
{echoSocket=new Socket("10.102.4.41",1111);} //與服務器建立連接
catch(IOException e)
{System.out.println("error");}
}
public void st(String stri) //發(fā)送字符串的方法
{
try
{ DataOutputStream os=new DataOutputStream(echoSocket.getOutputStream());
DataInputStream is=new DataInputStream(echoSocket.getInputStream());
os.writeUTF(""+ stri ); //向服務器輸送string
os.flush();
}
catch(IOException e)
{System.out.println(" error:"+e); }
}
public String st1() //接收字符串的方法
{
String Line="";
try
{ DataOutputStream os=new DataOutputStream(echoSocket.getOutputStream());
DataInputStream is=new DataInputStream(echoSocket.getInputStream());
Line=is.readUTF(); //從服務器讀來的信息
ta.appendText(""+Line); //在文本域中輸出信息
}
catch(IOException e)
{System.out.println(" error:"+e); }
return Line;
}
}
7 程序調(diào)試心得:
1) 在建立Socket連接時,兩端的端口號必須設為一致,否則建立不了連接。服務器端必須有主機IP地址或主機名參數(shù)。
2) 連接建立好之后應確定輸入和輸出流。起初程序中用的是DataInputStream和PrintStream,結果只能傳輸英文,傳輸中文時產(chǎn)生亂碼,將PrintStream改為DataOutputStream,使用readUTF()和writeUTF()方法后,中文傳輸問題得到解決。
3) 如果一個使用某端口的程序沒有關閉,另一個程序就不能使用這個端口。
4) 開始進行通信的程序均為 Application,因不符合客戶機/服務器機制,應將客戶端的Application改為Applet。其轉(zhuǎn)化的主要步驟如下:
? 創(chuàng)建一個包含APPLET標簽的HTML文件;
? 去掉應用程序中的main()方法;
? 類名應繼承Applet類,而不是Frame類,并在程序開頭加入
import java.applet.*;語句;
? 用init()方法代替Application程序中的構造方法,當瀏覽器創(chuàng)建Applet類對象的時候,它自動執(zhí)行init()方法;
? 如Application中缺省使用了BorderLayout布局管理器,應在Applet的init()方法中重新設定;
? 如果Application中有setTitle()方法,必須將其去掉,如Application中使用了菜單,在Applet 中用按鈕來替換。
5) 懂得了在一程序中如何引用自定義的類中的方法和變量,在程序開頭加入import 類名;在程序中加入 類名 實例=new 類名(); 然后使用
實例.方法(),實例.變量即可。
參考文獻
[1] 廖雷等,Java程序設計教程,中國電力出版社,2003
篇7
下面我將對LINUX平臺下網(wǎng)絡通信設計的工作流程、數(shù)據(jù)發(fā)送、數(shù)據(jù)接收三個模塊進行詳細的介紹。
1工作流程
首先調(diào)用SOCKET函數(shù)創(chuàng)建一個用于通信的套接字,然后給已經(jīng)創(chuàng)建的套接字(SOCKET)綁定本地地址/端口號(Bind()),成功之后就在相應的SOCKET上監(jiān)聽(Listen())。當Accept()函數(shù)捕捉到一個連接服務(Connect())請求時,接受并生成一個新的SOCKET,并通過這個新的SOCKET與客戶端連接,用Read()/Write()或相關函數(shù)讀取和發(fā)送數(shù)據(jù),傳輸完畢時,用Close()關閉所有進程,結束這次通信??蛻舳顺绦蛟O計流程:客戶端也先要創(chuàng)建一個SOCKET,將該SOCKET與本地地址/端口號綁定,還需要指定服務器端的地址與端口號,隨后向服務器端發(fā)出連接(Connect())請求,請求被服務器端接受后,用函數(shù)進行了數(shù)據(jù)的接收與發(fā)送,傳輸完畢后,用Close()關閉套接口,通信結束。
2數(shù)據(jù)發(fā)送模塊
從應用層到物理層發(fā)送數(shù)據(jù)時,函數(shù)調(diào)用順序如下:send>sys—send>sys—sendto>sock—sendmsg>inet—sendmsg>tcp—sendmsg>tcp—send—skb>tcp_transmit>ip—queue—xmit>ip—queue—xmit2>ip—output>ip—finish—output>ip—finish—output2>neigh_resolve_output>dev_queue_xmit>ei—start_xmit網(wǎng)絡連接創(chuàng)建好以后,就可以進行發(fā)送數(shù)據(jù)了。
3數(shù)據(jù)接收模塊
當網(wǎng)絡上的數(shù)據(jù)到達接收計算機時,網(wǎng)卡控制器產(chǎn)生中斷,調(diào)用該中斷的中斷處理程序ei—interrupt()。在這個函數(shù)中主要通過判斷中斷狀態(tài)寄存器(ISR)的內(nèi)容,調(diào)用相應的處理程序來接收數(shù)據(jù)。如果中斷狀態(tài)寄存器顯示接收到數(shù)據(jù)或者接收到有錯誤的數(shù)據(jù)時,就調(diào)用ei—receive()函數(shù)進行數(shù)據(jù)的接收。在ei—receive()函數(shù)中要正確設定邊界指針寄存器(BNRY)和當前頁寄存器(CPR)的內(nèi)容,當BNRY或者CPR等于頁停止寄存器(PSTOP)時,把它們的內(nèi)容設置成頁開始寄存器(PSTART).當CPR=BNRY時,表示緩沖區(qū)全部被存滿,數(shù)據(jù)沒有被用戶讀走,這時網(wǎng)卡將停止往內(nèi)存寫數(shù)據(jù),新收到的數(shù)據(jù)包將被丟棄不要,而不覆蓋舊的數(shù)據(jù);當CPR=BNRY+1時,表示網(wǎng)卡的接收緩沖區(qū)里沒有數(shù)據(jù),用戶通過這個判斷知道沒有包可以讀,當CPR!=BNRY+1時,表示接收到新的數(shù)據(jù)包。
結束語
篇8
關鍵詞:網(wǎng)絡教學;遠程控制;Socket技術;輸入/輸出
中圖分類號:TP399
隨著信息技術的發(fā)展,目前社會已經(jīng)進入信息時代。在信息時代,信息量呈爆炸式增長,知識的更新速度越來越快,人才競爭越來越激烈,人們的教育也開始從“學校教育”朝“全民教育”、“終生教育”方向發(fā)展。目前網(wǎng)絡已經(jīng)成為了社會上最為有效的信息獲取工具之一,網(wǎng)絡教學的信息傳遞便捷、信息量大,因此網(wǎng)絡遠程教學已經(jīng)成為了目前最為有效地終身教育和全民教育方式。在網(wǎng)絡教學中,可以采用視頻、音頻、動畫等豐富的多媒體教學手段來進行多媒體教學,但是由于教育者和受教育者受到空間的限制,導致網(wǎng)絡教學的交互性較弱。而遠程控制技術可以在一定程度上增強網(wǎng)絡教學的交互性,因此在網(wǎng)絡教學中廣泛應用。
1 遠程控制需求分析
處理器、存儲器和輸入/輸出時在計算機模型中的主要組成部分,其中輸入/輸出模塊式計算機系統(tǒng)與用戶進行交互的主要方式。因此,為了提高網(wǎng)絡教學的交互性,遠程控制的基本需求就是能夠通過教學端和學習端的輸入/輸出共享。而針對目前計算機系統(tǒng)以鍵盤、鼠標輸入和屏幕圖像輸出的主流方式,遠程控制需要實現(xiàn)如下的功能:(1)可以記錄提取遠端計算機的鍵盤、鼠標輸入事件;(2)可以在本地計算機上響應遠端的鍵盤、鼠標事件;(3)能夠獲取目標計算機的屏幕圖像,并且在本地計算機上顯示。
2 遠程控制接口設計
通過對遠程控制需求的分析,遠程控制的實現(xiàn)需要如下的接口來實現(xiàn)遠端計算機和本地計算機之間的信息通信。
3 基于Socket的遠程控制通信
為了方便鼠標事件、鍵盤事件和屏幕截屏數(shù)據(jù)在因特網(wǎng)上的傳輸,在網(wǎng)絡教學的遠程控制中可以采用基于TCP/IP通信協(xié)議的Socket通信技術實現(xiàn)鼠標事件、鍵盤事件和屏幕截屏數(shù)據(jù)的傳輸。在遠程控制技術中,師生端Socket的通信實現(xiàn)流程如下所示:
3.1 建立Socket服務端。在需要接受遠程控制的學生端建立服務器套接字,準備接受教師端的鼠標、鍵盤事件,并且將截屏圖像信息通過該套接字進行傳輸。在Java技術中,建立Socket服務器端的代碼表示如下:
//建立Socket服務端,并且監(jiān)聽7088端口
ServerSocket ss=new ServerSocket(7088);
通過如上的方式可以非常便捷的建立Socket服務端,同時也可以使用其他接口來限制連接該Socket服務器的客戶端數(shù)量,或者綁定到某個具體的服務器IP地址。
3.2 等待客戶端連接。在建立Socket服務端,并且監(jiān)聽了本地計算機某個具體的通信端口之后,就可以使用accept()接口來監(jiān)聽客戶端的連接。accept()接口是一種阻塞I/O操作,會持續(xù)監(jiān)聽通信端口,直到接收到某個來自客戶端的連接,在遠程控制技術中,可以使用多線程循環(huán)監(jiān)聽端口,以實現(xiàn)持續(xù)的遠程操作。
3.3 接收客戶端請求。在建立Socket服務器端,并且與客戶端建立連接之后,教師端和學生端就可以通過建立的Socket連接進行鼠標/鍵盤事件和屏幕圖像的網(wǎng)絡傳輸。一個完整的遠程控制通信實現(xiàn)如下所示:
4 結束語
遠程控制技術的發(fā)展增加了網(wǎng)絡教學的“真實”性,可以更加方便的實現(xiàn)師生的交互。因此,遠程技術的發(fā)展可以更好的促進網(wǎng)絡教育教學的發(fā)展。
參考文獻:
[1]蔣方劍,周鵬,劉福啟.適合中小型院校的多媒體全自動控制系統(tǒng)的研究[J].中國現(xiàn)代教育裝備,2011(13):18-19.
[2]MillerK,Pegah M.Virtualization,Virtually at the Desktop[Z].The Special Interest Group on University andCollege Computing Services,2007:255-260.
[3]Niraj Tolia,David G,Andersen,M.Satyanarayan.Quantifying Interactive User Experience on Thin Clients[J].IEEE Computer,2006.
篇9
關鍵詞JAVA,網(wǎng)絡,SOCKET,APPLET
網(wǎng)絡上的系統(tǒng)結構多為客戶/服務器模式,服務器端負責數(shù)據(jù)和圖像等的存儲、維護、管理以及傳遞,客戶端則負責人機界面的操作、送出需求及顯示收回的數(shù)據(jù)。
下面介紹一下如何使用JAVA來進行網(wǎng)絡編程:
1)由于客戶端通過IE同服務器建立聯(lián)系,所以客戶端使用Applet,服務器端使用Application;
2)服務器應設置成多線程,應答多個客戶的請求;
3)兩端通信使用SOCKET機制。
1Java中輸入/輸出流概念:
過濾流DataInputStream和DataOutputStream除了分別作為FilterInputStream和FilterOutputStream的子類外,還分別實現(xiàn)了接口DataInput和DataOutput。接口DataInput中定義的方法主要包括從流中讀取基本類型的數(shù)據(jù)、讀取一行數(shù)據(jù)、或者讀取指定長度的字節(jié)數(shù),如readBoolean()readInt()、readLine()、readFully()等。接口DataOutput中定義的方法主要是向流中寫入基本類型的數(shù)據(jù)或者寫入一定長度的字節(jié)數(shù)組,如writeChar()、writeDouble()DataInputStream可以從所連接的輸入流中讀取與機器無關的基本類型數(shù)據(jù),用以實現(xiàn)一種獨立于具體平臺的輸入方式;DataInputStream可以向所連接的輸出流寫入基本類型的數(shù)據(jù)。
2Socket機制
Socket是面向客戶/服務器模型設計的,網(wǎng)絡上的兩個程序通過一個雙向的通訊連接實現(xiàn)數(shù)據(jù)的交換,這個雙向鏈路的一端稱為一個Socket。Socket通常用來實現(xiàn)客戶方和服務方的連接??蛻舫绦蚩梢韵騍ocket寫請求,服務器將處理此請求,然后通過Socket將結果返回給用戶。
Socket通信機制提供了兩種通訊方式:有聯(lián)接和無聯(lián)接方式,分別面向不同的應用需求。使用有聯(lián)接方式時,通信鏈路提供了可靠的,全雙工的字節(jié)流服務。在該方式下,通信雙方必須創(chuàng)建一個聯(lián)接過程并建立一條通訊鏈路,以后的網(wǎng)絡通信操作完全在這一對進程之間進行,通信完畢關閉此聯(lián)接過程。使用無聯(lián)接方式時其系統(tǒng)開銷比無聯(lián)接方式小,但通信鏈路提供了不可靠的數(shù)據(jù)報服務,不能保證信源所傳輸?shù)臄?shù)據(jù)一定能夠到達信宿。在該方式下,通信雙方不必創(chuàng)建一個聯(lián)接過程和建立一條通訊鏈路,網(wǎng)絡通信操作在不同的主機和進程之間轉(zhuǎn)發(fā)進行。
3Java語言
Java語言的優(yōu)點主要表現(xiàn)在:簡單、面向?qū)ο?、多線程、分布性、體系結構中立、安全性等方面。
(1)簡單性
Java與C++語言非常相近,但Java比C++簡單,它拋棄了C++中的一些不是絕對必要的功能,如頭文件、預處理文件、指針、結構、運算符重載、多重繼承以及自動強迫同型。Java實現(xiàn)了自動的垃圾收集,簡化了內(nèi)存管理的工作。這使程序設計更加簡便,同時減少了出錯的可能。
(2)面向?qū)ο?/p>
Java提供了簡單的類機制和動態(tài)的構架模型。對象中封裝了它的狀態(tài)變量和方法,很好地實現(xiàn)了模塊化和信息隱藏;而類則提供了一類對象的原型,通過繼承和重載機制,子類可以使用或重新定義父類或超類所提供的方法,從而既實現(xiàn)了代碼的復用,又提供了一種動態(tài)的解決方案。
Java是一種完全面向?qū)ο蟮某绦蛟O計語言,它除了數(shù)組、布爾和字符三個基本數(shù)據(jù)類型外的其它類都是對象,它不再支持全局變量。在Java中,如果不創(chuàng)建新類就無法創(chuàng)建程序,Java程序在運行時必須先創(chuàng)建一個類的實例,然后才能提交運行。
Java同樣支持繼承特性,Java的類可以從其它類中繼承行為,但Java只支持類的單重繼承,即每個類只能從一個類中繼承。
Java支持界面,界面允許程序員定義方法但又不立即實現(xiàn),一個類可以實現(xiàn)多個界面,利用界面可以得到多重繼承的許多優(yōu)點而又沒有多重繼承的問題。
(3)多線程
多線程使應用程序可以同時進行不同的操作,處理不同的事件。在多線程機制中,不同的線程處理不同的任務,他們之間互不干涉,不會由于一處等待影響其他部分,這樣容易實現(xiàn)網(wǎng)絡上的實時交互操作。
Java程序可以有多個執(zhí)行線程,如可以讓一個線程進行復雜的計算,而讓另一個線程與用戶進行交互,這樣用戶可以在不中斷計算線程的前提下與系統(tǒng)進行交互。多線程保證了較高的執(zhí)行效率。
(4)分布性
Java是面向網(wǎng)絡的語言。通過它提供的類庫可以處理TCP/IP協(xié)議,用戶可以通過URL地址在網(wǎng)絡上很方便的訪問其他對象。
(5)體系結構中立
Java是一種網(wǎng)絡語言,為使Java程序能在網(wǎng)絡的任何地方運行,Java解釋器生成與體系結構無關的字節(jié)碼結構的文件格式。Java為了做到結構中立,除生成機器無關的字節(jié)碼外,還制定了完全統(tǒng)一的語言文本,如Java的基本數(shù)據(jù)類型不會隨目標機的變化而變化,一個整型總是32位,一個長整型總是64位。
為了使Java的應用程序能不依賴于具體的系統(tǒng),Java語言環(huán)境還提供了用于訪問底層操作系統(tǒng)功能的類組成的包,當程序使用這些包時,可以確保它能運行在各種支持Java的平臺上。
java.lang:一般的語言包。其中包括用于字符串處理、多線程、異常處理和數(shù)字函數(shù)等的類,該包是實現(xiàn)Java程序運行平臺的基本包
java.util:實用工具包。其中包括哈希表、堆棧、時間和日期等
java.io:基于流模型的輸入/輸出包。該包用統(tǒng)一的流模型實現(xiàn)了各種格式的輸入/輸出,包括文件系統(tǒng)、網(wǎng)絡和設備的輸入/輸出等
:網(wǎng)絡包。該包支持TCP/IP協(xié)議,其中提供了socket、URL和WWW的編程接口
java.awt:抽象窗口工具集。其中實現(xiàn)了可以跨平臺的圖形用戶界面組件,包括窗口、菜單、滾動條和對話框等
java.applet:支持applet程序設計的基本包
(6)安全性
用于網(wǎng)絡、分布環(huán)境下的Java必須要防止病毒的入侵,Java不支持指針,一切對內(nèi)存的訪問都必須通過對象的實例變量來實現(xiàn),這樣就防止了程序員使用欺騙手段訪問對象的私有成員,同時也避免了指針操作中容易產(chǎn)生的錯誤。
4JAVA工具
(1)JDK
1)Java編譯器
Java編譯器將Java源代碼文件編譯成可執(zhí)行的Java字節(jié)碼。Java源代碼文件的擴展名為.java,Java編譯器把這種擴展名的文件編譯成擴展名為.class的文件。源文件中的每個類在編譯后都將產(chǎn)生一個class文件,這意味一個Java源代碼文件可能編譯生成多個class文件。
2)Java解釋器
Java解釋器對編譯生成的字節(jié)碼格式的可執(zhí)行程序的運行提供支持,它是運行非圖形Java程序的命令行工具。
3)Appletviewer
它是JavaApplet的簡單測試工具,可使用它來測試JavaApplet程序,而不需要WWW瀏覽器的支持。
(2)VisualJ++
VisualJ++集成了可視化界面設計、交互式調(diào)試、代碼編輯、聯(lián)機幫助信息和介紹如何快速掌握該開發(fā)環(huán)境的實用向?qū)У榷囗椆δ?,同時具有能充分利用ActiveX和COM新技術的優(yōu)勢。利用VisualJ++可創(chuàng)建交互性很強的Internet應用程序,是難得的Java開發(fā)系統(tǒng)。
5客戶機/服務器通信的實現(xiàn):
(1)Application同Applet的通信
兩端通過Socket機制進行連接:
1)客戶端的編程流程:
?打開Socket,新建一個套接字;
?為套接字建立一個輸入和輸出流;
?根據(jù)服務器協(xié)議從套接字讀入或向套接字寫入;
?清除套接字和輸入/輸出流;
2)服務器端的編程流程:
?打開ServerSocket,創(chuàng)建一個服務器型套接字和一個普通套接字,服務器型套接字在指定端口為客戶端請求的Socket服務;
?使用ServerSocket類的accept()方法使服務器型套接字處于監(jiān)聽狀態(tài)并把監(jiān)聽結果返回給普通套接字;
?為該普通套接字創(chuàng)建輸入和輸出流;
?從輸入和輸出流中讀入或?qū)懭胱止?jié)流,進行相應的處理,并將結果返回給客戶端;
?在客戶端和服務器工作結束后關閉所有的對象,如服務器型的套接字,普通套接字,輸入和輸出流。
正是由于Java系統(tǒng)具有基于Socket的靈活通信機制,因而其應用程序能自由地打開和訪問網(wǎng)絡上的對象,就象在本地文件系統(tǒng)中一樣。
(2)Applet之間的通信:
Applet之間的通信使用AppletContext類的getApplet()方法。
<appletcode=applet1.classwidth=200height=200name=first>
只要在程序中加入
Appletoneapplet=getAppletContext().getApplet(“first”);便可使用name為first的Applet中的方法了。
在該課題中大量使用了該種通信方法,因為專門同服務器端通信的Applet中包含接收信息方法和發(fā)送信息方法,所有客戶端的Applet都要使用負責通信的Applet中的方法,所以客戶端的Applet同負責通信的Applet必須進行通信。
6程序
//服務器端程序S.java負責與客戶端通信
importjava.io.*;
.*;
importjava.lang.*;
importT2;
classThreadEchoHandlerextendsThread//創(chuàng)建線程
{
T2theT2=newT2();
Socketincoming;
intcounter;
ThreadEchoHandler(Socketi,intc)
{incoming=i;
counter=c;}
publicvoidrun()
{
try
{
DataInputStreamin=newDataInputStream(incoming.getInputStream());
DataOutputStreamout=newDataOutputStream(incoming.getOutputStream());
System.out.println("hello");
booleandone=false;
while(!done)
{Stringaa="";
Stringstr=in.readUTF();//從客戶端得到字符串
//在此加入各自的服務程序
System.out.println(str);
theT2.pass(str);//解碼
theT2.tongji();//修改監(jiān)控庫中的信息
aa=theT2.guan();//操縱數(shù)據(jù)庫
System.out.println("stringzis:"+aa);
if(pareTo("null")!=0)
//若是查詢數(shù)據(jù)庫,返回查詢后的結果
{//若不是查詢數(shù)據(jù)庫,不向客戶端輸出信息
out.writeUTF(aa);
out.flush();}
}//while
incoming.close();//線程關閉
}//try
catch(IOExceptione)
{System.out.println(e);}
}//endrun
}
//----------------------------------------
classS
{
publicstaticvoidmain(String[]args)
{
inti=1;
try
{
ServerSockets=newServerSocket(1111);
for(;;)
{
Socketincoming=s.accept();
System.out.println("connect:"+i);
newThreadEchoHandler(incoming,i).start();
i++;
}
}
catch(Exceptione)
{System.out.println(e);}
}
}
//客戶端通信小應用程序Echo.java
importjava.io.*;
.*;
importjava.awt.*;
importjava.applet.*;
publicclassEchoextendsApplet
{
TextAreata;
SocketechoSocket;
DataOutputStreamos;
DataInputStreamis;
StringLine;
publicvoidinit()
{
setBackground(Color.white);
ta=newTextArea(5,80);
ta.setEditable(false);
add(ta);
try
{echoSocket=newSocket("10.102.4.41",1111);}//與服務器建立連接
catch(IOExceptione)
{System.out.println("error");}
}
publicvoidst(Stringstri)//發(fā)送字符串的方法
{
try
{DataOutputStreamos=newDataOutputStream(echoSocket.getOutputStream());
DataInputStreamis=newDataInputStream(echoSocket.getInputStream());
os.writeUTF(""+stri);//向服務器輸送string
os.flush();
}
catch(IOExceptione)
{System.out.println("error:"+e);}
}
publicStringst1()//接收字符串的方法
{
StringLine="";
try
{DataOutputStreamos=newDataOutputStream(echoSocket.getOutputStream());
DataInputStreamis=newDataInputStream(echoSocket.getInputStream());
Line=is.readUTF();//從服務器讀來的信息
ta.appendText(""+Line);//在文本域中輸出信息
}
catch(IOExceptione)
{System.out.println("error:"+e);}
returnLine;
}
}
7程序調(diào)試心得:
1)在建立Socket連接時,兩端的端口號必須設為一致,否則建立不了連接。服務器端必須有主機IP地址或主機名參數(shù)。
2)連接建立好之后應確定輸入和輸出流。起初程序中用的是DataInputStream和PrintStream,結果只能傳輸英文,傳輸中文時產(chǎn)生亂碼,將PrintStream改為DataOutputStream,使用readUTF()和writeUTF()方法后,中文傳輸問題得到解決。
3)如果一個使用某端口的程序沒有關閉,另一個程序就不能使用這個端口。
4)開始進行通信的程序均為Application,因不符合客戶機/服務器機制,應將客戶端的Application改為Applet。其轉(zhuǎn)化的主要步驟如下:
?創(chuàng)建一個包含APPLET標簽的HTML文件;
?去掉應用程序中的main()方法;
?類名應繼承Applet類,而不是Frame類,并在程序開頭加入
importjava.applet.*;語句;
?用init()方法代替Application程序中的構造方法,當瀏覽器創(chuàng)建Applet類對象的時候,它自動執(zhí)行init()方法;
?如Application中缺省使用了BorderLayout布局管理器,應在Applet的init()方法中重新設定;
?如果Application中有setTitle()方法,必須將其去掉,如Application中使用了菜單,在Applet中用按鈕來替換。
5)懂得了在一程序中如何引用自定義的類中的方法和變量,在程序開頭加入import類名;在程序中加入類名實例=new類名();然后使用
實例.方法(),實例.變量即可。
參考文獻:
[1]廖雷等,Java程序設計教程,中國電力出版社,2003
篇10
關鍵詞:智能電器;無線通信;WiFi模塊;單片機
物聯(lián)網(wǎng)技術是當代信息技術的一個重要標志,改變了人們的生產(chǎn)生活方式,使傳統(tǒng)電器變得更加便捷而智能。智能電器是將微處理器、傳感器技術、網(wǎng)絡通信技術引入家電設備后形成的新型產(chǎn)品[1]。通信接口是智能電器的重要組成部分,用來實現(xiàn)通信節(jié)點之間信息的發(fā)送和接收。穩(wěn)定的通信接口為智能電器系統(tǒng)的正常運行提供了有力保障。電器的控制方式分為有線控制和無線控制。有線控制是將控制器放置于強電箱內(nèi),開關和中控主機分別通過弱電控制線路進行控制。有線控制的優(yōu)點:安全、穩(wěn)定、不受干擾;有線控制的缺點:方案設計要求高、線路架設要求高、后期拓展改動困難。隨著物聯(lián)網(wǎng)和智能電器的發(fā)展,有線通信逐漸被無線通信所替代。當前普遍使用的無線通信技術主要有RFID技術、藍牙技術、ZigBee通信技術、Z-Wave技術和WiFi技術[2,3]。WiFi通信技術是智能手機終端接入Internet的主流模式,其他類型的通信設備要接入Internet需要網(wǎng)關進行轉(zhuǎn)換[4]。局域網(wǎng)絡中的無線路由多采用WiFi技術與各節(jié)點進行無線通信,不用另設網(wǎng)關和網(wǎng)絡改造便可實現(xiàn)系統(tǒng)搭建。智能手機可以通過局域網(wǎng)和廣域網(wǎng)控制設備的工作狀態(tài)。
1智能電器系統(tǒng)構成
智能家電系統(tǒng)由無線路由、智能終端、智能電器三大主要部分構成,如圖1所示。無線路由為系統(tǒng)提供WiFi無線網(wǎng)絡,是局域網(wǎng)絡通信的基礎部件,若要實現(xiàn)遠程控制,需要與Internet連接進行廣域網(wǎng)3G通信[5]。智能手機和平板電腦等智能終端可以在無線網(wǎng)絡下,對處于網(wǎng)絡中的智能電器節(jié)點進行控制操作。智能家電內(nèi)需要集成WiFi無線通信模塊接收控制指令,實現(xiàn)電器的非接觸型智能控制。系統(tǒng)的操作流程:首先,配置模塊要連接的路由器的名稱(SSID)、密鑰和服務器的IP地址;然后,手機等控制終端連接服務器下達操作命令;最后,控制系統(tǒng)根據(jù)指令完成相應的動作或查詢等操作。智能手機和智能電器通常以STA站點形式入網(wǎng),即作為無線網(wǎng)絡的終端使用,形成客戶端-客戶端方式通信。也可以設置電器為AP,即作為無線接入點形成自組網(wǎng)絡。無線WiFi模塊在使用之前需要通過串口寫入智能電器的MAC地址、網(wǎng)絡名稱、密碼和IP等配置信息。圖2為智能電器的系統(tǒng)框圖。
2通信接口設計
2.1通信接口構成在由路由器構建的WLAN無線網(wǎng)絡中,智能手機可以和電器中的WiFi模塊進行通信。通信串口WiFi模塊內(nèi)嵌TCP/IP協(xié)議,通信接口如圖3所示。硬件構成主要是由內(nèi)嵌的一個單片機和WiFi模塊構成,單片機主要實現(xiàn)裸機驅(qū)動程序和TCP/IP協(xié)議;WiFi模塊則必須完成數(shù)據(jù)的無線接收和發(fā)送。模塊內(nèi)部集成了TCP/IP協(xié)議棧和WiFi模塊,用戶可以實現(xiàn)串口設備的無線網(wǎng)絡功能。嵌入式WiFi模塊對外提供UART串口或者SPI接口,其通信標準為IEEE802.11b/g,支持WPA/WPA2PSK加密,支持AES和TKIP加密算法。智能終端和WiFi模塊的通信格式常用的通信協(xié)議有HTTP、TCP/IP和Socket,HTTP是應用層協(xié)議;TPC/IP協(xié)議是傳輸層協(xié)議;Socket是應用層與TCP/IP協(xié)議的中間軟件,是對TCP/IP協(xié)議的封裝和應用抽象層[6]。面向嵌入式系統(tǒng)的通信協(xié)議多采用Socket協(xié)議。2.2Socket通信協(xié)議軟件實現(xiàn)采用Socket通信協(xié)議客戶端的通信過程:①建立通信;②查詢連接;③發(fā)送數(shù)據(jù);④接收數(shù)據(jù);⑤關閉連接。Android手機建立連接指令為newSocket(HOST,PORT),關閉連接指令為socket.close(),發(fā)送數(shù)據(jù)調(diào)用getOutputStream()方法,接收數(shù)據(jù)調(diào)用getInputStream()方法。服務器的通信過程可概述為:1)建立服務器端的Socket,偵聽網(wǎng)絡中的連接請求;2)當檢測到連接請求時,向客戶端發(fā)送收到連接請求的信息并建立連接;3)完成通信后關閉Socket連接。圖4為客戶端和服務器的通信流程,圖中的bind()和listen()方法用來綁定并監(jiān)聽Socket和端口號,accept()用來接收來自客戶端的連接請求。當點擊智能手機界面上的功能按鍵,后臺會將數(shù)據(jù)以Socket格式發(fā)送給WiFi模塊,發(fā)送指令被電器控制系統(tǒng)接收后,便會執(zhí)行檢測、開啟、關斷、調(diào)節(jié)等響應動作,并可根據(jù)需要將執(zhí)行結果返回給智能手機。2.3單片機通信接口設計1)硬件設計通信接口和執(zhí)行機構的硬件設計以單片機為核心,包括單片機最小系統(tǒng)及其電路設計,把單片機、無線模塊、繼電器等模塊有機的結合在一起。WiFi模塊的TX和RX與其串口相連,負責信息指令的接收和發(fā)送;WiFi模塊和單片機的通信采用串口模式(UART),串口波特率可達115200bps,執(zhí)行命令由普通I/O口輸出,可控制執(zhí)行部件響應動作指令;配以光照、溫度等傳感器裝置送入單片機自帶ADC模擬數(shù)字轉(zhuǎn)換接口,可以檢測環(huán)境狀態(tài)并作出相應動作,使電器更加智能。圖5是單片機控制繼電器的硬件連接示意圖,WiFi模塊的UART_TX和UART_RX與單片機串口的RXD和TXD相連,完成UART口雙向通訊功能;繼電器K與普通I/O口相連,通過繼電器電路可以實現(xiàn)對智能電器的開關控制。當模塊收到合上指令時,輸出高電平,繼電器的線圈有電流流過,繼電器的觸點吸合,給負載供電;當模塊收到斷開指令時,端口輸出低電平,執(zhí)行斷電操作。設計了傳感器的AD轉(zhuǎn)換接口,實現(xiàn)了可以根據(jù)環(huán)境狀態(tài)的檢測結果控制繼電器的動作。2)軟件設計單片機系統(tǒng)上電復位后,首先進行硬件初始化,WiFi模塊的初始化在函數(shù)Config()中完成,在函數(shù)中完成波特率、初始化接收、發(fā)送數(shù)據(jù)的中斷類型等設置。模塊開啟后,尋找并連接網(wǎng)絡,建立數(shù)據(jù)連接,由單片機封裝數(shù)據(jù)后通過WiFi模塊發(fā)送給智能手機。接收數(shù)據(jù)時,單片機程序不斷地對WiFi模塊進行掃描查詢,查詢數(shù)據(jù)緩沖區(qū)BUF中是否有數(shù)據(jù),當查詢到模塊接收到手機用戶發(fā)送操作或者查詢指令時,根據(jù)Socket協(xié)議格式提取相關信息,對指令進行處理并執(zhí)行相關動作,并通過UART串口返回數(shù)據(jù)到手機端。接收手機端數(shù)據(jù)需要使用外部中斷來完成,能夠確保數(shù)據(jù)傳輸?shù)耐叫院蛯崟r性,接收8位為一幀有效數(shù)據(jù)。單片機主程序流程如圖6所示。單片機設置了監(jiān)測環(huán)境光照功能,由光敏傳感器經(jīng)過ADC芯片轉(zhuǎn)化后送到單片機,數(shù)據(jù)與閾值電壓比較,當超過閾值時關斷電器設備。
3結論
該智能電器通信系統(tǒng)在無線網(wǎng)絡的平臺下,在傳統(tǒng)電器上接入無線WiFi模塊,實現(xiàn)了智能終端對智能家電的遠程監(jiān)測與控制功能,單片機能夠?qū)崟r的對接收到的指令進行處理和響應,滿足了設計要求。該系統(tǒng)安全、可靠、性能穩(wěn)定。為大規(guī)模智能電器遠程的監(jiān)管與控制提供了可能。
參考文獻
[1]劉遠聰.物聯(lián)網(wǎng)智能家居遠程控制技術的研究[D].蘭州:蘭州交通大學,2015.
[2]曹方.物聯(lián)網(wǎng)與短距離無線通信[J].上海信息化,2013(5):32-35.
[3]鄭先海,呂海華,楊弘平.基于AndroidPN技術的Zig-bee無線網(wǎng)絡的物聯(lián)網(wǎng)數(shù)據(jù)采集[J].沈陽工程學院學報:自然科學版,2014,10(4):370-372,381.
[4]吳吉義,李文娟,黃劍平,等.移動互聯(lián)網(wǎng)研究綜述[J].中國科學:信息科學,2015,45(1):45-69.
[5]羅軍舟,吳文甲,楊明.移動互聯(lián)網(wǎng):終端、網(wǎng)絡與服務[J].計算機學報,2011,34(11):2029-2051.