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

C# Socket 程式設計入門:TCP 同步通訊、聊天室與 FTP 完整實作

     編輯:關於C#

前言

.NET System.Net.Sockets 命名空間提供 Socket、TcpClient/TcpListener、UdpClient、NetworkStream 等類別。本文從基礎 Socket 流程切入,完整實作 TCP 同步通訊、多執行緒廣播式聊天室、檔案傳輸 (FTP) 三大範例。

Socket 基礎流程

  • 伺服端:Socket → Bind → Listen → Accept → Receive/Send → Close
  • 客戶端:Socket → Connect → Send/Receive → Close
  • IPEndPoint:IP + Port 組合,IPAddress.Parse("127.0.0.1") 解析 IP。
  • 同步模式:Send/Receive 封鎖直到完成,適合教學與簡單應用。

範例一:基本 TCP 回聲測試

Client


Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
c.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2000));
byte[] bs = Encoding.ASCII.GetBytes("hello! socket test");
c.Send(bs);
byte[] recv = new byte[1024];
int n = c.Receive(recv);
Console.WriteLine("Server: " + Encoding.ASCII.GetString(recv, 0, n));
c.Close();

Server


Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2000));
s.Listen(0);
Socket client = s.Accept();
byte[] recv = new byte[1024];
int n = client.Receive(recv);
Console.WriteLine("Client: " + Encoding.ASCII.GetString(recv, 0, n));
client.Send(Encoding.ASCII.GetBytes("OK!"));
client.Close(); s.Close();

高階類別:TcpClient / TcpListener / NetworkStream


// Client
TcpClient tcp = new TcpClient("127.0.0.1", 2000);
NetworkStream ns = tcp.GetStream();
// ns.Read/Write 或 StreamReader/StreamWriter

// Server
TcpListener listener = new TcpListener(2000);
listener.Start();
TcpClient client = listener.AcceptTcpClient();
NetworkStream ns = client.GetStream();

UdpClient:無連線、無 GetStream、直接 Send/Receive,適合廣播、即時性要求高、可容忍丟包場景。

範例二:多執行緒廣播式聊天室

架構

  • Client:UI 執行緒 + 接收執行緒 (while(true) ReadLine)、UTF-8 編碼傳輸、Control.Invoke 跨執行緒更新 ListBox。
  • Server:監聽執行緒 (AcceptSocket) + 廣播執行緒 (foreach client Send)、ArrayList 管理連線、FormClosing 發送 "Close" 通知 Server 移除。
  • 編碼處理:傳送前 Encoding.UTF8.GetBytes,接收後 Encoding.Convert(UTF8, GB2312) 顯示中文。

完整程式碼包含 Form1.Designer.cs、Form1.cs (Client/Server)、Form2.cs (連線對話框),篇幅較大,核心邏輯如上。

範例三:簡易 FTP 檔案傳輸

  • 指令格式:CMD|參數|參數...\r\n (如 LIST, DOWNLOAD|filename, UPLOAD|filename|size)。
  • Server:列出目錄檔案、傳送檔案二進位內容、接收檔案寫入磁碟。
  • Client:ListBox 顯示檔案清單、下載/上傳按鈕觸發指令、進度條顯示傳輸進度。

關鍵技術點總結

主題要點
編碼網路傳輸統一 UTF-8,顯示端轉目標編碼 (GB2312/Big5/UTF-8)
跨執行緒 UIWinForms 用 Invoke/BeginInvoke,WPF 用 Dispatcher.Invoke
連線管理Server 維護連線集合,Client 斷線時通知 Server 移除
協定設計命令|長度|內容 結構化,避免粘包/拆包問題
異步改良.NET 4.5+ 用 SendAsync/ReceiveAsync + await 取代阻塞執行緒

結語

Socket 程式設計是網路應用基石。同步阻塞模式易理解、除錯,適合教學與低併發場景;高併發生產環境請採用 SocketAsyncEventArgs、Task、Kestrel 等非同步高效能模型。本文三大範例涵蓋點對點通訊、多點廣播、檔案傳輸核心模式,配合編碼處理、執行緒同步、協定設計等實戰細節,可作為網路程式開發的參考藍圖。

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