本文提供一個完整的TCP Server實例,包括動態連接庫、單元測試、驗收測試、Winform模擬測試。供新手學習,還望老手多提意見。
項目地址:https://tcpserversocket.codeplex.com/ (可直接Download項目工程)
系統結構
項目文件如下:
TcpServerSocket:項目核心動態鏈接庫,如果在別的項目中使用,只用引用該項目生成的DLL即可;
WindowsFormsApplication1:一個簡單的winform應用程序,讓你快事了解如何在WinForm中使用;
UnitTestProject:單元測試;
AcceptanceTest:驗收測試,模擬高速連接斷開的客戶端,快速數據發送。
項目的核心是使用TcpListener進行監聽,使用NetworkStream進行TCP數據流讀寫。服務器的核心原理如下圖:
系統測試
WindowsFormsApplication1 + 網絡調試助手測試效果:
WindowsFormsApplication1 + AcceptanceTest效果:
如何使用
可以在你的項目中添加生成的TcpServerSocket.dll,然后簡單幾句代碼就可以開啟TCP Server之旅!
var tcp = new TcpServer { RecvNewClientAction = handler => Debug.WriteLine("recv new client: " + handler), LostClientAction = handler => Debug.WriteLine("lost client :" + handler), RecvDataAction = (ip, data, len) => Debug.WriteLine("{0}:{1}", ip, Encoding.ASCII.GetString(data, 0, len)), ListenPort = 8080 }; tcp.StartListen();
后續開發
程序主要一個問題是處理斷網、客戶端程序突然崩潰等非正常斷線情況。本來是想在程序中加心跳處理,但這樣的話就增加了程序的復雜性。希望各位大大們指點迷津!