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

UDP 資料傳輸實作(一):P2P 點對點通訊完整範例

     編輯:關於C語言

專案目標

建立一個 Windows Forms 應用程式,在區域網路兩台電腦之間透過 UDP 8888 連接埠進行純文字的點對點通訊。介面包含對方 IP 輸入框、訊息輸入框、發送按鈕、訊息顯示列表與清空按鈕。

表單控制項佈局

控制項NameText/備註
LabelLabel1對方 IP:
TextBoxtbIP輸入對方 IP
TextBoxtbMsg輸入發送內容
ButtonbtnSend發送
ListBoxlbInfo顯示收發紀錄
GroupBoxgbSend發送視窗
GroupBoxgbReceive接收視窗
ButtonbtnClear清空

核心程式碼架構

1. 引用命名空間與全域變數

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

private UdpClient uc;
private IPEndPoint IEp;
private Thread th;

2. 表單建構函式:初始化 UdpClient 與跨執行緒設定

public Form1()
{
    InitializeComponent();
    CheckForIllegalCrossThreadCalls = false; // 允許非 UI 執行緒直接操作控制項(教學用,正式專案建議用 Invoke)
    uc = new UdpClient(8888);                // 綁定本地 8888 連接埠
}

3. 發送按鈕點擊事件:啟動接收執行緒並發送資料

private void btnSend_Click(object sender, EventArgs e)
{
    // 解析對方 IP 與固定 Port 8888
    IEp = new IPEndPoint(IPAddress.Parse(tbIP.Text), 8888);

    // 建立並啟動接收執行緒
    th = new Thread(new ThreadStart(listen));
    th.IsBackground = true; // 設為背景執行緒,主視窗關閉時自動結束
    th.Start();

    // 將訊息轉為 UTF-8 位元組陣列並發送
    string temp = tbMsg.Text;
    byte[] b = Encoding.UTF8.GetBytes(temp);
    uc.Send(b, b.Length, IEp);
}

4. 接收方法(供執行緒呼叫)

private void listen()
{
    while (true)
    {
        string text = Encoding.UTF8.GetString(uc.Receive(ref IEp));
        lbInfo.Items.Add(text + "\n");
    }
}

5. 清空按鈕與資源釋放

private void btnClear_Click(object sender, EventArgs e)
{
    lbInfo.Items.Clear();
}

protected override void Dispose(bool disposing)
{
    if (disposing && (components != null))
    {
        components.Dispose();
        th?.Abort();
        uc?.Close();
    }
    base.Dispose(disposing);
}

執行與測試

  1. 編譯專案,複製執行檔到兩台同網段電腦。
  2. 分別啟動,輸入對方 IP,點擊「發送」即可雙向通訊。
  3. 觀察 ListBox 即時顯示收發內容。

關鍵提醒

  • UDP 無連線,雙方皆需先綁定相同 Port(本例 8888)才能收發。
  • CheckForIllegalCrossThreadCalls = false 僅供教學快速原型,正式專案請使用 Control.Invoke 或 SynchronizationContext 進行跨執行緒 UI 更新。
  • 防火牆需允許 UDP 8888 通訊。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved