工作中經常遇到需要實作TCP用戶端或服務端的時候,如果每次都自己寫會很麻煩且無聊,使用SuperSocket庫又太大了。這時候就可以使用SimpleTCP了,當然僅限于C#語言。
SimpleTCP是一個簡單且非常有用的 .NET 庫,用于處理啟動和使用 TCP 套接字(用戶端和伺服器)的重複性任務,使用起來非常友善、代碼也少。它的内部不是直接使用的Socket,而是在TcpClient的基礎上進行了再次封裝,接口更簡單、明了。
目錄
簡介
使用方法
實作用戶端
實作服務端
總結
它的主要特點如下:
源碼簡單:源碼就幾個類,每個類也不大,在了解TcpClient用法的基礎上不需要注釋就可以看懂。
功能單一:不像其它庫一樣功能繁多,它隻專注于實作簡單的TCP用戶端、服務端,使用起來不用擔心增加系統的複雜性。
使用簡單:後面的示例會具體講解,啟動一個用戶端或服務端隻需要幾行代碼,想擴充功能也很簡單。
說一下它的不足之處(在我看來完全可以接受):
已停止更新:最後更新時間是2017年,不過庫的功能比較簡單、單一,也沒那麼多更新的内容。
性能不是最優的:底層是基于TcpClient的,性能注定不會太高,但能用TcpClient的地方都可以用它。
在項目中直接引用SimpleTCP.dll即可, dll檔案可以通過NuGet安裝或從github下載下傳源碼編譯。
SimpleTCP内部有一個特殊字元分割字元串的協定可以直接使用,也可以在DataReceived事件處理程式中實作自己的協定。
實作一個用戶端的代碼如下:
DelimiterDataReceived和DataReceived内部使用了兩個不同的位元組連結清單,解析起來互不影響。這兩個事件的處理程式中盡量不要做耗時的操作,否則會影響後續的資料接收。
SimpleTCP沒有心跳、重連功能,也沒找到回報用戶端連接配接狀态的屬性(不建議使用内部TcpClient的連接配接狀态)。我們可以直接擴充這些功能,代碼如下:
把上面的代碼按順序複制到控制台的Main函數中,然後加入下面的代碼就可以收發資料了:
注:WriteLineAndGetReply内部使用的是DataReceived,不會自動去除分隔符。
服務端功能比較簡單,把收到分割資料加工後傳回用戶端,代碼如下:
上面的代碼主要為了展示庫的功能,實際使用時可能就幾行代碼,性能要求不高的項目都可以使用。
項目和庫的源碼連結如下:
TcpTest 提取碼:wvj0
SimpleTCP-master.zip 提取碼:kycj(推薦在github上下載下傳)