在 SendMessage() 中連續發送三條相同訊息,純粹為測試非同步情境下的「訊息合併/拆分」現象。最後在 Main() 建立實例並呼叫測試:
class Client {
static void Main(string[] args) {
ConsoleKey key;
ServerClient client = new ServerClient();
client.SendMessage();
Console.WriteLine("\n\n輸入 \"Q\" 鍵退出。");
do {
key = Console.ReadKey(true).Key;
} while (key != ConsoleKey.Q);
}
}
良好的程式碼重構讓邏輯在複雜度提升時仍保持清晰可讀。
先啟動伺服器,再連續啟動兩個客戶端,觀察輸出:



伺服器端可同時服務多個客戶端;從接收位元組數可見,兩個客戶端各有兩個請求被合併成一條。因為我們定義了協議(長度前綴),伺服器能正確拆解。客戶端未做同樣處理,故收到回應時仍會發生合併——解決方式同理,此處不再贅述。
協議雖好用,但若客戶端惡意輸入 [length=xxx] 卻實際長度不符,程式會出錯。可選對策:對 [ 和 ] 進行轉義(如 \[、\]),讀取後再還原。
本範例到此結束。後續範例將持續採用非同步傳輸並加入更多協議內容,下一篇將介紹如何傳送/接收檔案。