伺服器端通訊埠監聽

建置伺服器端程式,透過 TcpListener 綁定 IP 與通訊埠,啟動通訊埠監聽,等候用戶端建立 TCP 連線。提供兩種實作版本:主控台程式WinForms 視窗程式

核心 API 說明

  1. IPAddress:代表本機 IP 位址,IPAddress.Parse("127.0.0.1") 可將 IP 字串轉換成物件。
    • 127.0.0.1:本機回環位址,僅限本機存取;若要讓區域網路其他電腦連線,請改用區網 IP(例如 192.168.x.x);
    • IPAddress.Any:監聽本機所有網路卡的 IP。
  2. TcpListener:TCP 伺服器監聽類別,建構子參數:IP位址 + 通訊埠編號
  3. listener.Start()開始監聽,呼叫後伺服器就會等待用戶端連入。

主控台版本

using System;
using System.Net;
using System.Net.Sockets;

namespace TalkService
{
    class Program
    {
        static void Main(string[] args)
        {
            // 建立IP物件
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            // 建立TCP監聽器,監聽9500通訊埠
            TcpListener listener = new TcpListener(ip, 9500);
            // 啟動監聽
            listener.Start();
            Console.WriteLine("開始監聽...按E鍵離開");

            ConsoleKeyInfo info;
            do
            {
                info = Console.ReadKey();
            } while (info.Key != ConsoleKey.E);

            listener.Stop(); // 離開時停止監聽
        }
    }
}Code language: JavaScript (javascript)

這段程式僅僅啟動監聽,尚未呼叫 AcceptTcpClient 等待用戶端連線,僅單純維持程式不要結束。

WinForms 版本

介面控制項:(你可以在 WinForm 表單上新增控制項,用來設定 IP、通訊埠、要傳送的文字內容等)

  • textBoxIP:IP 輸入方塊(預設 127.0.0.1
  • textBoxPort:通訊埠輸入方塊(預設 9500
  • buttonStart:【啟動】按鈕
  • textBoxInfo:資訊顯示文字方塊
using System;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;

namespace SocketChatServer
{
    public partial class Form1 : Form
    {
        IPAddress ip;
        TcpListener listener;

        public Form1()
        {
            InitializeComponent();
        }

        private void buttonStart_Click(object sender, EventArgs e)
        {
            // 解析IP與通訊埠
            ip = IPAddress.Parse(this.textBoxIP.Text);
            int port = Convert.ToInt32(this.textBoxPort.Text);
            listener = new TcpListener(ip, port);

            // 啟動監聽
            listener.Start();

            // 輸出日誌
            string log = $"伺服器已啟動 {DateTime.Now.ToShortTimeString()}\r\n";
            this.textBoxInfo.Text = log + this.textBoxInfo.Text;
        }
    }
}Code language: PHP (php)

待處理問題

  1. UI 介面卡住問題
    listener.AcceptTcpClient() 屬於封鎖式方法,如果直接在按鈕點擊的主執行緒呼叫,視窗就會凍結。後續需要開新執行緒或是透過 async/await 非同步等待用戶端連入。
  2. 通訊埠被佔用
    當 9500 通訊埠被其他程式佔用時,執行 new TcpListener() 會拋出例外,開發階段務必加上 try‑catch 做例外攔截。
  3. 跨主機連線
    綁定 127.0.0.1 只能本機測試;要讓區網其他電腦連進來,IP 要填寫本機區網位址,同時防火牆要放行 9500 通訊埠。

伺服器端通訊埠監聽

Previous:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *