伺服器完整程式碼 (Console)
using System; using System.Net; using System.Net.Sockets; using System.IO;
public class EchoServer
{
public static void Main()
{
int port = 1234;
IPAddress ip = Dns.Resolve("localhost").AddressList[0];
TcpListener listener = new TcpListener(ip, port);
listener.Start();
Console.WriteLine("Server Started");
Socket socket = listener.AcceptSocket(); // 阻塞等待單一連線
try
{
if (socket.Connected)
{
while (true)
{
Console.WriteLine("Client connected");
NetworkStream ns = new NetworkStream(socket);
StreamWriter sw = new StreamWriter(ns);
StreamReader sr = new StreamReader(ns);
string line = sr.ReadLine();
Console.WriteLine("Read: " + line);
line = line.ToUpper() + "!";
sw.WriteLine(line);
Console.WriteLine("Wrote: " + line);
sw.Flush();
}
}
}
catch (Exception ex) { Console.WriteLine(ex); }
finally { socket.Close(); Console.WriteLine("Exiting"); }
}
}
流程說明
TcpListener 綁定 IP/Port 並 Start()。
AcceptSocket() 同步接受一個連線(單執行緒,一次只能服務一個用戶端)。
- 使用
NetworkStream、StreamReader/Writer 進行文字收發。
- 將收到訊息轉大寫加驚嘆號回傳。
擴充方向
- 多執行緒/非同步
BeginAccept 支援多用戶端。
- 協定設計:訊息長度前綴、心跳、序列化格式(JSON/Protobuf)。
- 優雅關閉:處理
SocketException、CancellationToken。