# 終端機 1:啟動 Server
server.exe 8080
# 終端機 2:啟動 Client
client.exe 127.0.0.1 8080
Server 端應印出 Accepted connection from 127.0.0.1:xxxxx,Client 端可輸入文字觀察雙向收發。
# 終端機 1:Server 綁定埠
udp_server.exe 9090
# 終端機 2:Client 指定目標
udp_client.exe 127.0.0.1 9090
UDP 無連線,Server 需在 recvfrom 取得客戶端位址後才能 sendto 回覆。
| 工具 | 平台 | 特色 |
|---|---|---|
| Hercules SETUP Utility | Windows | 支援 TCP Server/Client、UDP、Serial,GUI 操作,顯示十六進位/ASCII |
| Packet Sender | 跨平台 | 可儲存指令序列、支援 Hex/ASCII、命令列模式 |
| netcat (nc) | Linux/macOS/WSL | nc -l 8080 (Server)、nc 127.0.0.1 8080 (Client) |
| socat | Linux | 強大的雙向管道,socat - TCP4:127.0.0.1:8080 |
| Wireshark | 跨平台 | 封包擷取分析,驗證封包格式、重傳、檢查碼 |
// C# 範例:啟動 Server 執行緒,主執行緒跑 Client
var serverThread = new Thread(() => {
var server = new TcpListener(IPAddress.Loopback, 0);
server.Start();
int port = ((IPEndPoint)server.LocalEndpoint).Port;
Console.WriteLine($"Server listening on {port}");
using (var client = server.AcceptTcpClient())
using (var stream = client.GetStream())
{
byte[] buf = new byte[1024];
int n = stream.Read(buf, 0, buf.Length);
Console.WriteLine("Server received: " + Encoding.UTF8.GetString(buf, 0, n));
stream.Write(Encoding.UTF8.GetBytes("ACK from Server"));
}
server.Stop();
});
serverThread.Start();
Thread.Sleep(200); // 等 Server 就緒
// Client 連線
using (var client = new TcpClient())
{
client.Connect(IPAddress.Loopback, port);
using (var stream = client.GetStream())
{
stream.Write(Encoding.UTF8.GetBytes("Hello Server"));
byte[] buf = new byte[1024];
int n = stream.Read(buf, 0, buf.Length);
Console.WriteLine("Client received: " + Encoding.UTF8.GetString(buf, 0, n));
}
}
serverThread.Join();
| 現象 | 可能原因 | 檢查步驟 |
|---|---|---|
| Client 連線逾時 | Server 未綁定/監聽正確 IP:Port | netstat -an | findstr 8080 確認 LISTENING |
| UDP 收不到資料 | Client 未送至正確 IP/Port,或 Server 未 recvfrom | Wireshark 擷取 UDP 封包,確認目的位址 |
| 本機通、區網不通 | 防火牆阻擋、Server 綁定 127.0.0.1 而非 0.0.0.0 | Server 改 bind(0.0.0.0),開放防火牆規則 |
| 資料亂碼 | 編碼不一致、未處理黏包/半包 | 定義協定(長度前綴/分隔符),指定 UTF-8 |
tc qdisc add dev lo root netem loss 10% delay 50ms本地測試 Winsock 程式最直接方式是開兩個命令視窗分別跑 Server/Client;搭配 Hercules、netcat 等工具可免寫 Client 快速驗證 Server;區網測試注意綁定 0.0.0.0 與防火牆;自動化測試可在單元測試中啟動真實 Socket 或使用容器編排。