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【附源碼】