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

Visual C# 網路程式設計之 TCP(三):TcpListener 伺服器端程式設計完整指南

     編輯:關於C語言

從 NetworkStream 到資料收發

取得 NetworkStream 後,即可使用標準 Write/Read 方法進行資料傳輸。伺服器端採用 TcpListener (建構於 Socket 之上) 提供更高層級的 TCP 服務抽象,FTP、HTTP 等應用層協定皆基於此類別實作。

TcpListener 核心建構式

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);
}

完整伺服器生命週期

  1. 啟動監聽:listener.Start()
  2. 阻塞等待連線:TcpClient client = listener.AcceptTcpClient() (或 AcceptSocket() 取得底層 Socket)
  3. 取得網路流:NetworkStream ns = client.GetStream()
  4. 資料讀寫:ns.Write() / ns.Read() 或搭配 StreamReader/Writer
  5. 關閉資源:ns.Close()、client.Close()、最後 listener.Stop()

完整示範程式:時間伺服器 (埠 13)


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 資源。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved