「完整案例」基於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環境
【西門子】西門子S7通訊協議,你不知道的那些事兒
【OPCUA】C#上位機實現OPCUA通訊案例
【OPCUA】OPCUA+MQTT+阿里雲,能做哪些事兒
【WinCC】C#/.NET聯合WinCC實現資料通訊
【WinCC】手把手教你基於C#開發Wincc語音報警外掛【附原始碼】
【雲APP】基於C#實現手機APP訪問西門子PLC【附原始碼】
&n