首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 網路程式設計:非同步傳輸字串 (1) — 邁向真正伺服器的關鍵一步

     編輯:關於C語言

前情提要:解決上一節遺留的訊息邊界問題

本文將採用非同步方式改寫伺服器,使其能同時服務多個客戶端的多次請求。但在此之前,必須先解決同步範例中暴露的核心問題:客戶端多次寫入,伺服器端可能合併或拆分接收。

問題示意

假設客戶端連續發送兩次 Welcome to Tracefact.Net!,資料到達伺服器時可能有三種情況:

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

  1. 理想:兩條獨立完整接收。
  2. 拆分:一條訊息被拆成兩條接收。
  3. 合併:兩條訊息合併成一條接收。

實測重現

修改客戶端改用 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;
    }
}

執行結果:

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

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved