Socket = IP 地址 + 埠號 + 協議(TCP/UDP)。它是應用層與傳輸層的抽象介面,System.Net.Sockets.Socket 類別提供底層控制,TcpListener/TcpClient 為高層封裝。
| 模式 | 特點 | 適用場景 |
|---|---|---|
| 單執行緒同步阻塞 | 程式碼簡單,一次只能處理一個連線 | 教學、極簡工具 |
| 多執行緒同步 | 每連線一執行緒,易寫但資源消耗大 | 連線數較少(<100)的內部工具 |
| 異步 I/O (APM/Task) | 單執行緒處理大量連線,高擴展性 | 生產級伺服器、高併發場景 |
var listener = new TcpListener(IPAddress.Any, 8888);
listener.Start();
while (true) {
using (var client = listener.AcceptTcpClient())
using (var stream = client.GetStream()) {
// 讀寫 stream
}
}
using (var client = new TcpClient("127.0.0.1", 8888))
using (var stream = client.GetStream()) {
// 發送/接收資料
}
async/await 搭配 NetworkStream.ReadAsync/WriteAsync。SocketException、ObjectDisposedException 等異常。