C# 網路程式設計:非同步傳輸字串 (1) — 邁向真正伺服器的關鍵一步
前情提要:解決上一節遺留的訊息邊界問題 本文將採用非同步方式改寫伺服器,使其能同時服務多個客戶端的多次請求。但在此之前,必須先解決同步範例中暴露的核心問題:客戶
C# 網路程式設計:非同步傳輸字串 (2) — 訊息邊界問題與自訂協議設計
核心問題:TCP 訊息邊界不保留 客戶端分兩次 Write(),主觀上是兩個請求;但伺服器可能合併成一條,或將一條拆成兩條。若客戶端連續發送三次 Welcome
C# 網路程式設計:非同步傳輸字串 (3) — 協議解析器 RequestHandler 完整實作與測試
協議解析核心邏輯 GetActualString 接收符合協議格式的字串,回傳字串陣列。若發生多個請求合併,會全部拆解回傳。類別內建靜態 Test() 與輔助
C# 網路程式設計:非同步傳輸字串 (5) — 伺服器/客戶端非同步完整實作
伺服器端:主程式極度精簡 得益於 RemoteClient 建構函式已完成初始化,主程式僅需建立 TcpListener、進入迴圈接受連線、新增包裝物件即可:
C# 網路程式設計:非同步傳輸字串 (完) — 多客戶端測試與協議缺陷討論
測試:同時啟動多個客戶端 在 SendMessage() 中連續發送三條相同訊息,純粹為測試非同步情境下的「訊息合併/拆分」現象。最後在 Main() 建立實例
C# 網路程式設計:同步傳輸字串 (上) — 建立連線與資料流基礎
伺服器/客戶端通訊模型 連線建立後,雙方透過 資料流 (Stream) 傳輸資料。幾乎任何物件都可序列化存入流中,因此實際上可以在客戶端與伺服器之間傳輸任意類型
C# 網路程式設計:同步傳輸字串 (下) — 緩衝區處理與客戶端實作
伺服器端:從資料流讀取字串 在上一節中,我們已經建立了伺服器與客戶端的連線。現在進入核心環節:如何從 NetworkStream 讀取資料並還原為字串。程式碼的
C# 同步網路傳輸字串實作 (3/3):伺服器單一連線單一請求與多請求演進
初版:單一連線、單一請求 // Server TcpClient client = listener.AcceptTcpClient(); NetworkSt
C# 同步網路傳輸字串實作 (4/4):伺服器處理多用戶端單一請求與多請求邏輯
四種伺服器處理模式比較 模式Accept 迴圈Read 迴圈能力 1無無單一用戶端、單一請求 2有有 (同層)多用戶端、各一請求 (
C# 同步網路傳輸字串實作 (6/6):客戶端互動選單與收發迴圈
客戶端完整程式碼 {1}, client.Client.LocalEndPoint, client.Client.RemoteEndP
C# 同步網路傳輸字串實作 (7/7):完整執行結果與 ASCII/UTF-8/Unicode 編碼對照
執行輸出驗證 127.0.0.1:8500 Menu: S - Send, X - Exit Input the message: Hello, Im jim
C# 網路程式設計基礎 (1/1):TCP、Socket、三種架構與監聽連線入門
系列簡介 5 篇系列教學:基礎概念 → 同步字串傳輸 → 非同步強化 → 檔案傳輸 → 聊天室綜合實作。另參考「C# 簡易聊天程式」 (不同實作)。 TCP
C# 網路程式設計基礎 (2/2):Socket、TcpClient/TcpListener 與連線建立流程
Socket 核心資訊 Socket 封裝雙向連線的兩組端點資訊: 本地端點:本機 IP + 本機 Port 遠端端點:對方 IP + 對方 Port
C# 網路程式設計基礎 (3/3):三種聊天室架構模式比較
模式一:純 P2P (完全點對點) 每部電腦同時是 Client 與 Server,需自行監聽 Port。 難點:節點發現。常用 UDP Broadc
C# 網路程式設計基礎 (4/4):伺服器啟動監聽與 netstat 驗證
啟動監聽步驟 建立 IPAddress (本機回環 127.0.0.1)。 實例化 TcpListener 指定 IP 與 Port (如 8500)
C# 網路程式設計基礎 (5/5):用戶端同步連線與 netstat 驗證
TcpClient 連線方式 建構式指定遠端端點:new TcpClient(localhost, 8500) 會立即發起連線 (同步阻塞)。 無參數
C# 網路程式設計基礎 (7/7):同步伺服器接受單一用戶端連線
AcceptTcpClient:同步阻塞方法 listener.AcceptTcpClient() 會暫停執行緒,直到有用戶端連線,才回傳代表該連線的 TcpC
C# 網路程式設計基礎 (8/8):同步伺服器處理多用戶端連線
問題:單一 Accept 只能收一個連線 伺服器若只呼叫一次 listener.AcceptTcpClient(),僅能接受第一個用戶端;後續連線雖在 OS 層