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

C# Socket 重用 UDP 連接埠:SetSocketOption 實作

     編輯:關於C#

問題背景

預設情況下,同一 UDP 連接埠僅允許一個 Socket 綁定。多執行緒或多進程場景下(如多播接收),需啟用 SO_REUSEADDR 選項實現連接埠重用。

核心程式碼

IPAddress groupAddress = IPAddress.Parse("239.0.84.11");
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

// 關鍵:啟用連接埠重用
listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);

listener.Bind(new IPEndPoint(IPAddress.Any, 8411));

// 加入多播群組
MulticastOption multicastOption = new MulticastOption(groupAddress);
listener.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, multicastOption);

關鍵點解析

  • SocketOptionLevel.Socket + SocketOptionName.ReuseAddress:對應 Win32 SO_REUSEADDR,允許多個 Socket 綁定相同 IP:Port。
  • 參數 1 表啟用,0 表停用。
  • 多播場景:綁定 IPAddress.Any 並透過 AddMembership 加入特定群組,所有 Socket 皆能收到多播封包。

適用場景

  • 多執行緒並行接收同一 UDP 連接埠資料。
  • 多進程部署在同機器,需共用連接埠。
  • 多播/廣播接收器叢集。

注意事項

  • Windows 上 SO_REUSEADDR 行為與 Linux 略有不同,建議測試驗證。
  • 安全性:同連接埠重用可能導致惡意程式攔截資料,生產環境請配合防火牆限制來源 IP。

小結

一行 SetSocketOption 即可解決 UDP 連接埠重用需求,配合多播選項,滿足高併發、分散式接收場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved