C# Development | 如何快速建立 TCP/IP 連線並傳送資料

用最簡單的方式建立一個 Server 端與 Client 端,從 Client 端傳送資料至 Server 端並顯示。

Garnett.C 嘎內
OneStep@ATime
5 min readDec 16, 2020

--

前言

這陣子剛好在 case 與 case 之間的小空檔,因為剛進來公司時主要都是寫 Modbus 通訊,而很少碰 TCP/IP 的東西,所以想說藉此空檔來練習一下,畢竟目前網路傳輸還是比較通用且應用面較廣,之後玩 EtherCAT 也會比較有概念。

概念簡介

TCP/IP 是網路通訊的一種架構,如果講到網路通訊架構的細節可以講三天三夜都講不完,所以如果有興趣更深入了解的話可以參考下面鳥哥的基礎網路概論介紹,裡面介紹得十分詳盡。

  • 鳥哥的 Linux 私房菜 - 基礎網路概念 Link👇

而目前市面因為疫情關係所以需求量大增的視訊軟體或資料傳輸程式也都是用 TCP 或 UDP 的網路通訊協定來傳輸。

簡單說明一下,在下面實作的範例中 Server 及 Client 分別要做哪些事:

  • Server 端主要先建立一個 TcpListener,然後不斷的監聽看是否有 Client 要連線進來。當有 Client 請求連線出現後建立連線,等建立連線成功後從 Client 端將資料接收。當連線關閉後回到等待 Client 連線狀態。
  • Client 端要做的事就比較簡單,就是利用 3 個 Button 測試功能,功能分別是「建立連線」、「傳送資料」及「關閉連線」。

實作完整程式碼及講解

  • 專案類型:Windows Form Application
  • 專案環境:Visual Studio 2015, .NET Framework 4.5.2

🔘Server 端

  • Server 端 Form 設計
  • Server 端 Source Code
  • Server 端要點解說

1. 持續監聽的程式建議在副執行緒執行,不然 UI 介面會被 while 迴圈卡死。

2. 因為接收資料與更新 UI 介面是不同執行緒,因此需要用委派來更新畫面,相關資料可以參考之前跨執行緒無效的教學。

3. 也可以設計從 Server 端傳值至 Client 端,變成一個可以互相傳資料的程式。除此之外也可以自行設計通訊格式,自行定義 Header 及 Checksum 以確保收到的資料是正確的。

🔘Client 端

  • Client 端 Form 設計
  • Client 端 Source Code
  • Client 端要點解說

1. 因為要執行的動作較簡單,因此就不再用另外的執行緒執行這些動作。

2. 若有餘裕可自行設計接收資料的功能,就可以達到 Server 與 Client 端進行雙向傳輸資料的功能。

🔘References

執行結果

Client 端成功連線至 Server 端,傳輸資料並顯示於 Server 端。

執行結果

尾聲

這一篇可能用文字描述的部分較少,想說盡量用較精簡的程式碼達到想要的功能需求,太多的文字解釋反而又會擾亂注意力,想說嘗試改變一下風格。如果有什麼問題或建議都歡迎留言告訴我,如果幫得上忙的我就盡力解答。

--

--

Garnett.C 嘎內
OneStep@ATime

學店畢業末班生,前輪班星人工程師,現在轉任可以慢慢實現自己夢想的工程師工作。喜歡閱讀及分享,踏上追尋夢想的生命旅程~