「完整案例」基於Socket開發TCP傳輸客戶端
1 程式介面設計
TCP客戶端在上位機開發中應用很廣,大多數情況下,上位機軟體都是作為一個TCP客戶端來與PLC或其他伺服器進行通訊的。TCP客戶端的主要功能就是連接伺服器、發送數據、接收數據、斷開連接,而不同場合的區別在於發送數據和接收數據的內容不同。
本案例主要是開發一個TCP客戶端軟體,具備基本的連接功能,並可以發送ASCII、UTF8等不同格式的字元串,也支援發送16進位字元串發送,同時支援文件和JSON格式數據發送。根據以上功能,設計程式介面如下圖所示:
2 程式程式碼設計
-
接收資訊顯示:首先編寫一個接收資訊顯示的方法,這裡是通過ListView來展示接收資訊的。
-
連接伺服器:連接伺服器首先實例化Socket對象,然後通過調用Connect的方法來實現,連接成功後,開啟一個執行緒來接收伺服器返回的數據,具體程式碼如下:
-
斷開連接伺服器:斷開連接伺服器直接調用Socket的相關API方法即可。
-
接收數據:對於數據接收及解析,由於本案例的客戶端軟體支援多種不同形式數據發送,那麼接收必然也支援多種形式,那麼對於不同的形式,我們創建了一個枚舉類型,這樣方便後續擴展,程式碼如下所示:
-
因此在數據接收處理時,我們用第一個位元組作為類型判斷,比如第一個位元組如果為0,那麼則認為接收的數據為ASCII字元串,也將按照這種形式來進行解析,從第二個位元組開始一直到最後,是有效數據部分,所以數據接收及解析方法如下所示:
-
發送ASCII字元串:對於ASCII字元串,首先要將發送的字元串按照ASCII的編碼格式轉換成位元組數組,然後給這個位元組數組前面增加一個位元組,位元組數值為Message.ASCII,程式碼如下所示:
-
發送文件:發送文件之前首先要選擇文件,選擇文件主要使用OpenFileDialog組件,程式碼如下:
-
選擇文件之後,發送文件就是將選擇的文件內容轉換成位元組數組,然後給這個位元組數組前面增加一個位元組,位元組數值為Message.File,這裡會發送兩次,第一次是發送一個字元串,告訴伺服器要發送的文件名稱,採用的是UTF8編碼,程式碼如下所示:
-
發送JSON數據:JSON數據主要會涉及到實體對象和JSON文件的轉換,這裡使用Newtonsoft.Json庫編寫了一個JSONHelper的方法,然後需要創建了一個實體對象集合,然後通過EntityToJSON方法轉換成JSON字元串,再將JSON字元串轉換成位元組數組,同樣,前面需要增加一個位元組,位元組數值為Message.JSON,程式碼如下:
3 程式功能調試
由於TCP伺服器軟體還沒有開發,所以這裡我們使用網路調試助手來進行功能調試:
- 建立連接與斷開連接:
- 各種數據類型發送與接收
回顧往期內容
【西門子】基於PLCSIM-Advanced搭建西門子PLC環境
【WinCC】手把手教你基於C#開發Wincc語音報警插件【附源碼】
【雲APP】基於C#實現手機APP訪問西門子PLC【附源碼】