戴雯惠
摘要:該文設計和封裝一個高性能的TCP/IP通信類庫組件,完成一個基于socket通信技術的數(shù)據(jù)交換平臺,在設計中考慮到各個信息系統(tǒng)都存在著異構的差異,解決“信息孤島”問題。為了保障數(shù)據(jù)的一致性、提高數(shù)據(jù)共享,設計出通信基礎類庫,構建完善的數(shù)據(jù)交換平臺。同時通信類庫考慮到物聯(lián)網(wǎng)信息數(shù)據(jù)采集與控制,實現(xiàn)對物聯(lián)網(wǎng)平臺中的控制節(jié)點進行基于TCP/IP的數(shù)據(jù)交換。
關鍵詞:TCP/IP;異構系統(tǒng);Socket
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2015)12-0022-02
Design and Implementation of a High-performance TCP/IP Communications Library
DAI Wen-hui
(Suzhou Institute of Trade & Commerce, Suzhou 215009, China)
Abstract: In this paper, A high-performance TCP/IP communications library by design and packaging, complete a data exchange platform based on socket communication technology,Considering the differences in the design of the heterogeneous system,solve the problem of "information island".in order to ensure the consistency of the data and improve data sharing, design of communication base on class library module, build perfect data exchange platform.At the same time communication libraries considering the Internet of Thing information data acquisition and control, the Internet of things platform to realize the control node for data exchange based on TCP/IP.
Key words: TCP/IP; heterogeneous system; Socket
目前信息孤島中涉及的系統(tǒng)繁多,為了實現(xiàn)數(shù)據(jù)共享,各個系統(tǒng)間需要不斷地進行數(shù)據(jù)交換,保障各個系統(tǒng)間數(shù)據(jù)的一致性,采用計算機網(wǎng)絡TCP/IP協(xié)議進行遠程數(shù)據(jù)通信。目前物聯(lián)網(wǎng)技術已經(jīng)應用到了我們生活的各個方面,物聯(lián)網(wǎng)信息采集采用TCP/IP協(xié)議在上位機上完成和嵌入式設備的信息交互。本文主要研究如何實現(xiàn)高性能通信類庫,在此類庫基礎上完成TCP/IP通信平臺構建,實現(xiàn)異構系統(tǒng)整合和物聯(lián)網(wǎng)平臺數(shù)據(jù)信息交換同時對數(shù)據(jù)進行實時解析。
1 TCP/IP通信類庫關鍵技術描述
1.1 TCP/IP協(xié)議
TCP/IP通訊協(xié)議采用了四層的層級模型結構,與OSI七層模型不同,每一層都調用它的下一層所提供的網(wǎng)絡任務來完成的需求。TCP 協(xié)議提供是一個可靠的、面向連接的協(xié)議。
圖1顯示了 TCP/IP 層級模型結構,應用層(Application)之間的協(xié)議通過逐級調用傳輸層(Transport layer)、網(wǎng)絡層(Network Layer)和物理數(shù)據(jù)鏈路層(Physical Data Link)而可以實現(xiàn)應用層的應用程序通信互聯(lián)。本文主要研究的是通信兩端程序建立通信方式、通信連接方式和通信報文發(fā)送與接收方式。IP層接收由底層發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層TCP層,IP層也可以從TCP層接收傳遞過來的數(shù)據(jù)包到更低層。IP數(shù)據(jù)包是不可靠的,IP數(shù)據(jù)包中含有發(fā)送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。TCP是面向連接的通信協(xié)議,通過三次握手建立連接,通訊完成時要拆除連接,由于TCP是面向連接的所以只能用于端到端的通訊。
1.2 Socket套接字
網(wǎng)絡上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,這個連接的一端稱為一個socket。Socket利用客戶/服務器(Client/Server)模式解決了進程之間建立通信連接的問題。連接過程包括服務器監(jiān)聽,客戶端請求,連接確認。套接字(socket)是通信的基礎,是支持TCP/IP協(xié)議的網(wǎng)絡通信的基本操作單元。本文交換平臺采用的是基于TCP/IP 協(xié)議的socket 接口。
2 TCP/IP通信類庫設計及實現(xiàn)
2.1 總體設計
本文實現(xiàn)服務器端和客戶端之間進行TCP/IP數(shù)據(jù)傳輸。實現(xiàn)單片機與上位機,服務器與客戶端之間的數(shù)據(jù)雙向傳輸。
在服務器端安裝服務器通信組件用于接收和發(fā)送數(shù)據(jù)??蛻舳税惭b客戶端組件也可以發(fā)送數(shù)據(jù)到服務器端,實現(xiàn)服務器和客戶端進行數(shù)據(jù)互通。Sockets 是以 Client 和 Server 交互通信方式來使用的。Server 放在一臺機器中,而把 Client 放在不同的機器上,Client 連接到 Server 交換信息。一個 socket 有一系列典型的事件流。在面向連接的 Client/Server 模型中,Server 端的 socket 總是等待一個 Client 端的請求。
2.2 服務器端設計
服務端首先設置監(jiān)聽號,然后定義服務器端監(jiān)聽類,并且實例化化監(jiān)聽類為對象,然后初始化監(jiān)聽對象,服務器監(jiān)聽這時就可以開始了,此時可以接收來自客戶端發(fā)送過來的信息,當信息發(fā)送完成以后可以關閉服務器端的監(jiān)聽事件。
2.3 客戶端設計
客戶端首先定義服務器端IP地址和端口號,然后進行客戶端進程初始化,初始化完成以后客戶端與服務器進程進行連接,連接完成以后客戶端發(fā)送信息到服務器端進行,信息發(fā)送完成以后,客戶端可以接收到服務器端回執(zhí),同時關閉本次連接。
2.4 TCP/IP報文
TCP/IP報文格式主要包括包括:
1) Source Port,Destination Port源端口號,目標端口號。IP實現(xiàn)了點到點的數(shù)據(jù)通信;
2) Sequence Number發(fā)送序列號。IP實現(xiàn)點到點的通信,這種通信是不可靠的;
3) Acknowledgment Number: 確認序號。對于發(fā)送進程這個序號表示下一個tcp報文的起始序號,對于接收進程,表示表示下一個希望接收到報文的序號;
4) Checksum:對報文進行校驗。如果校驗失敗,就丟棄該報文。
3 系統(tǒng)總體實現(xiàn)
3.1 系統(tǒng)總體框架
在面向連接的Client/Server模型中,Server端的socket總是等待一個Client請求。在請求這個過程中,服務端首先建立能被客戶端使用的地址,建立地址后,服務端等待客戶端請求,當客戶端通過socket連接服務進程后,客戶端進程與服務端進程之間就可以進行信息交換。Client/Server 是通信程序設計的基本模式。TCP/IP 應用程序都是基于 Client/Server 方式的??蛻舳?服務器端進行通信如圖2所示:
3.2 服務器端實現(xiàn)
服務器端先初始化Socket,然后與端口綁定(bind),對端口進行監(jiān)聽(listen),調用accept阻塞,等待客戶端連接。在這時如果有個客戶端初始化一個Socket,然后連接服務器(connect),如果連接成功,這時客戶端與服務器端的連接就建立了??蛻舳税l(fā)送數(shù)據(jù)請求,服務器端接收請求并處理請求,然后把回應數(shù)據(jù)發(fā)送給客戶端,客戶端讀取數(shù)據(jù),最后關閉連接,一次交互結束。服務器端主要代碼如下:
1)SocketListener 方法 初始化服務數(shù)據(jù)
輸入?yún)?shù):
Int32 numConnections要同時處理連接的最大數(shù)目
Int32 receiveBufferSize要使用的每個 I/O 操作的套接字緩沖區(qū)大小
2)Init 方法 服務初始化 初始化緩沖區(qū)以杜絕內存碎片
3)Start 方法 開啟服務阻塞端口偵聽客戶端連接
輸入?yún)?shù):
Object data偵聽地址{本地地址}
4)Stop 方法 關閉服務,釋放服務器監(jiān)聽資源
3.3 客戶端實現(xiàn)
客戶端程序通過連接服務端的IP地址與端口完成與服務端的數(shù)據(jù)傳輸。客戶端采用異步模式,在客戶端收到數(shù)據(jù)時調用委托,客戶端發(fā)送信息以后可以接收到服務端進程返回的回執(zhí)信息。客戶端主要代碼如下:
1)SocketClient(string hostName, int port) 初始化客戶端
hostname: 服務端地址{IP地址}
Port: 服務器開辟的端口號
2)void Connect() 連接到服務器過程
3) void Disconnect(); 斷開與服務器的鏈接
4) void Dispose(); 銷毀客戶端
5) Send(string message) 發(fā)送過程 message:向服務器發(fā)送的內容
6) delegate void GetReceive(string info) 定義接收數(shù)據(jù)事件
4 結束語
本文利用Visual Studio作為開發(fā)工具,考慮實際應用需求,根據(jù)指定的通信協(xié)議完成了設計和封裝一個高性能的TCP/IP通信類庫,方便其他應用對此類庫組件進行調用。該組件為基于TCP/IP的多線程Socket通信系統(tǒng)設計。并應用于智能水產(chǎn)養(yǎng)殖機器人控制系統(tǒng)上位機模塊,實現(xiàn)對機器人控制系統(tǒng)的監(jiān)測與控制,先后對系統(tǒng)進行了7*24小時的工作測試,工作性能良好,未發(fā)現(xiàn)系統(tǒng)異常。目前已經(jīng)申報軟件著作權并交付使用。
參考文獻:
[1] 王坤, 高贊. 基于VC + +實現(xiàn)串口通信的方法[J]. 信息化研究, 2010(10): 52-54.
[2] 王春柱. 基于CAN總線的電機控制器監(jiān)控系統(tǒng)[D]. 吉林: 吉林大學, 2012.
[3] 王彥民. Modbus/TCP協(xié)議通信測試[J]. 信息技術, 2012(11): 129-133.
[4] 羅亞非. 基于TCP的Socket多線程通信[J]. 電腦知識與技術, 2009(3): 22-24.
[5] 成衛(wèi)青, 王雪梅, 豆仁福,等. 三種基本網(wǎng)絡傳送模式的編程實現(xiàn)與分析[J]. 計算機技術與發(fā)展, 2011,21(7): 132-137.