取得 NetworkStream 後,即可使用標準 Write/Read 方法進行資料傳輸。伺服器端採用 TcpListener (建構於 Socket 之上) 提供更高層級的 TCP 服務抽象,FTP、HTTP 等應用層協定皆基於此類別實作。
public TcpListener(int port); // 指定本地埠
public TcpListener(IPEndPoint localEP); // 指定本地端點
public TcpListener(IPAddress localAddr, int port); // 指定本地 IP 與埠
IPHostEntry ipInfo = Dns.Resolve("127.0.0.1");
IPAddress ip = ipInfo.AddressList[0];
try
{
TcpListener tcpListener = new TcpListener(ip, 4088);
}
catch (Exception e)
{
MessageBox.Show("TcpListener 錯誤:" + e.Message);
}
listener.Start()TcpClient client = listener.AcceptTcpClient() (或 AcceptSocket() 取得底層 Socket)NetworkStream ns = client.GetStream()ns.Write() / ns.Read() 或搭配 StreamReader/Writerns.Close()、client.Close()、最後 listener.Stop()
bool done = false;
TcpListener listener = new TcpListener(13); // 埠 13 提供時間服務
listener.Start();
while (!done)
{
TcpClient client = listener.AcceptTcpClient();
NetworkStream ns = client.GetStream();
byte[] timeBytes = Encoding.ASCII.GetBytes(DateTime.Now.ToString());
try
{
ns.Write(timeBytes, 0, timeBytes.Length);
ns.Close();
client.Close();
}
catch (Exception e)
{
MessageBox.Show("流錯誤: " + e.Message);
}
}
AcceptTcpClient() 回傳新 TcpClient 代表該連線,主 TcpListener 持續監聽新連線。BeginAcceptTcpClient 或 Task.Run 多執行緒處理併發。SocketException、IOException,並確保 finally 區塊釋放所有 IDisposable 資源。