客戶端分兩次 Write(),主觀上是兩個請求;但伺服器可能合併成一條,或將一條拆成兩條。若客戶端連續發送三次 Welcome to TraceFact.Net!,伺服器端可能出現三種情況:

註:假設 ASCII 編碼,每格代表 1 位元組,字串結尾為連續 0。


修改客戶端用 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;
}
}
執行結果確實出現合併:


參考 HTTP 模式,在實際內容前加入「中繼資料」。定義協議:[length=XXX],XXX 為字串**字元數**(非位元組數)。例如:[length=25]Welcome to TraceFact.Net!。
伺服器讀取流程:
length。此問題屬純字串處理,非網路程式核心。下節將直接實作處理上述四種情況的 RequestHandler 類別。