本文將採用非同步方式改寫伺服器,使其能同時服務多個客戶端的多次請求。但在此之前,必須先解決同步範例中暴露的核心問題:客戶端多次寫入,伺服器端可能合併或拆分接收。
假設客戶端連續發送兩次 Welcome to Tracefact.Net!,資料到達伺服器時可能有三種情況:

註:假設 ASCII 編碼,每格代表 1 位元組。


修改客戶端改用 for 迴圈連續發送三次(縮短間隔):
string msg = "Welcome to TraceFact.Net!";
for (int i = 0; i <= 2; i++) {
byte[] buffer = Encoding.Unicode.GetBytes(msg);
try {
streamToServer.Write(buffer, 0, buffer.Length);
Console.WriteLine("Sent: {0}", msg);
} catch (Exception ex) {
Console.WriteLine(ex.Message); break;
}
}
執行結果:


確認合併發生。下一節將設計協議並實作解析器徹底解決此問題。