「完整案例」基於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【附源碼】

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM