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

C# 2.0 Socket 網路程式設計入門:TCP/UDP、同步/非同步、聊天室雛形

     編輯:關於C語言

Socket 通訊基礎流程

伺服器端

  1. new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
  2. Bind(new IPEndPoint(IPAddress.Any, port))
  3. Listen(backlog)
  4. Accept() 回傳新 Socket 處理該客戶端
  5. 收發:Receive/Send

客戶端

  1. new Socket(...)
  2. Connect(serverEP)
  3. 收發:Send/Receive

完整同步 TCP 範例

伺服器


var listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2000));
listener.Listen(10);
Console.WriteLine("等待連線...");

var client = listener.Accept();
var buffer = new byte[1024];
int len = client.Receive(buffer);
Console.WriteLine("收到: " + Encoding.ASCII.GetString(buffer, 0, len));

client.Send(Encoding.ASCII.GetBytes("OK"));
client.Close();
listener.Close();

客戶端


var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2000));
client.Send(Encoding.ASCII.GetBytes("Hello Server"));

var buffer = new byte[1024];
int len = client.Receive(buffer);
Console.WriteLine("回應: " + Encoding.ASCII.GetString(buffer, 0, len));
client.Close();

高階類別:TcpListener / TcpClient / NetworkStream


// 伺服器
var listener = new TcpListener(IPAddress.Any, 2000);
listener.Start();
var tcpClient = listener.AcceptTcpClient();
var stream = tcpClient.GetStream();
// stream.Read / stream.Write

// 客戶端
var tcpClient = new TcpClient("127.0.0.1", 2000);
var stream = tcpClient.GetStream();
  • NetworkStream 繼承 Stream,可搭配 StreamReader/Writer、BinaryReader/Writer。
  • UDP 使用 UdpClient,無連線、不可靠、適合廣播/即時傳輸。

同步 vs 非同步

  • 同步:Send/Receive/Accept 封鎖執行緒,簡單但延展性差。
  • 非同步 (APM):BeginSend/EndSend、BeginReceive/EndReceive,.NET 2.0 主流模式。
  • 現代 (TAP):.NET 4.5+ SendAsync/ReceiveAsync 配合 async/await,強烈建議新專案使用。

廣播式聊天室架構草圖

  • 伺服器維護 List<TcpClient> 或 Dictionary<string, TcpClient>。
  • 每個客戶端連線啟動專屬接收執行緒(或非同步回調)。
  • 收到訊息 → 解碼(UTF-8 → 字串) → 廣播給其他所有客戶端。
  • 編碼陷阱:傳送端 Encoding.UTF8.GetBytes,接收端 Encoding.UTF8.GetString,避免中文亂碼。
  • 跨執行緒更新 UI:Control.Invoke 或 SynchronizationContext.Post。
  • 優雅斷線:客戶端關閉視窗時發送特定指令(如 "__QUIT__|username"),伺服器移除清單並關閉對應 Socket。

關鍵命名空間

  • System.Net:IPAddress、IPEndPoint、Dns
  • System.Net.Sockets:Socket、TcpListener、TcpClient、UdpClient、NetworkStream
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved