◆師永林
一種基于TCP/IP協議的通信數據傳輸方式
◆師永林
(青海黃河上游水電開發有限責任公司工程建設分公司 青海 810000)
為了實現客戶端與服務端之間通信數據的無障礙傳輸、識別,本文介紹了一種基于TCP/IP協議的網絡搭建方法,并提出了一種簡單的通信數據封裝、解封裝方式。在工業上可有效解決較為簡單的網絡通信數據交互問題。
TCP/IP;Socket;封裝;解封裝
現階段工業自動化領域越來越依賴于互聯網,“互聯網+”概念已經在工業領域普遍具象化[1],如智慧新能源電站、全自動無人車間、車載智能導航系統等。一個完整的智能生產系統往往由多個分系統組成,而網絡通信協議及數據封裝、解封裝方式是各個分系統之間無障礙交互的橋梁與關鍵。本文基于TCP/IP協議提出了一種客戶端與服務器間簡單的數據傳輸、封裝及解封裝策略。
在TCP/IP協議網絡中,通常采用客戶端(client)、服務器(server)方式實現兩臺主機進程之間的通信[2]。套接字作為一個指向傳輸提供者的句柄,是TCP/IP通信協議的重要組成[3]。根據性質和作用的不同,套接字分為原始套接字、流式套接字和數據包套接字。本文采用雙向、有序、可靠的流式套接字用于數據傳輸服務。客戶端、服務器握手過程如圖1所示。
首先,服務器端采用Socket套接字句柄創建一個網絡服務,然后使用bind()函數為該服務綁定主機的IP地址和分配端口號,并通過listen()函數建立對客戶端的實時監聽。另外,客戶端同樣采用socket套接字句柄開啟一個網絡服務,并使用connect()函數向主機服務器發送連接請求。服務器端正常監聽到該連接申請后使用accept()函數接受客戶端的連接請求并建立網絡連接。此時,客戶端與服務器之間可以通過read()和write()函數實現雙方數據的交互。待網絡服務結束使用后可采用close()函數關閉二者創建的網絡服務項。
在工業領域,使用網絡通信可實現圖像、字母及數字(整型、浮點型)等數據類型的傳遞[4],在Socket套接字建立的網絡通信中采用read()和write()函數可實現各類數據的讀、寫操作,此時需要對數據制定一種封裝、解封裝規則,如圖2所示。
圖中通信數據由字母及浮點型數據組成,當通信數據類型較多時,可在數據位開頭添加char型的標識位,便于區分數據。在服務端,對char型數據a0可直接進行Int型強制類型轉換,對浮點型數據a1可乘以1000.00后進行Int型強制類型轉換,后對該數據的地址0、1、2、3分別進行0、8、16、24位的“>>”位移操作,將32位Int型高位數據移至低位數據,并進行byte型強制類型轉換后按順序寫入Byte[] array1數組內,其他數據依次按上述方法進行封裝。在客戶端,接收到數據并寫入Byte[] array2數組,同理,按上述步驟反向推理即為數據解封裝過程,最終可獲得與服務端正確對應的各類數據。上述數據在打包過程中對浮點型數據乘以1000.00后取整,主要目的是在解包時可保留小數點后三位。
經實際編程測試,Socket套接字建立的網絡通信比較穩定可靠,且本文提出的通信數據封裝、解封裝方式具有編程簡單、運行快速等優點,整體魯棒性較好。


[1]黃婭娜.中國工業自動化的回顧與思考[J].中國社會科學院工業經濟研究所,2019(4):22-3.
[2]夏素霞,袁宗福,李芳. 計算機網絡技術與應用[M].人民郵電出版社,2010.
[3]陳香凝,王燁陽,陳婷婷. Windows網絡與通信程序設計[M].人民郵電出版社,2017.
[4]張常清,晏西國,卜慶凱. 基于移動互聯網的APP與服務器之間的通信設計[J].青島大學學報(工程技術版),2015(6):26-30.