控制将发送UDP消息的网卡

本文关键字:消息 网卡 UDP 控制 | 更新日期: 2023-09-27 18:22:17

在我的机器上,我有两张网卡。我需要发送2个udp消息,但每个消息都将通过不同的网卡发送。

我该怎么做?

控制将发送UDP消息的网卡

您需要一些方法来识别网络接口。一种方法是使用它们的名称:

var networkInterfaceNames = new HashSet<string>() {
  "Local Area Connection",
  "Loopback Pseudo-Interface 1"
};

然后您需要获取这些接口的本地IP地址。我假设您想要使用IPv4,并且您的接口已经被分配了IPv4地址(AddressFamily.InterNetwork):

var localIpAddresses = NetworkInterface
  .GetAllNetworkInterfaces()
  .Where(ni => networkInterfaceNames.Contains(ni.Name))
  .Select(
    ni => ni
      .GetIPProperties()
      .UnicastAddresses
      .First(ua => ua.Address.AddressFamily == AddressFamily.InterNetwork)
  );

然后,您需要使用这些本地端点发送UDP数据包。一种方法是使用UdpClient:

foreach (var localIpAddress in localIpAddresses) {
  const Int32 LocalPort = 1234;
  var localEndPoint = new IPEndPoint(localIpAddress.Address, LocalPort);
  using (var udpClient = new UdpClient(localEndPoint)) {
    const Int32 RemotePort = 4321;
    var remoteEndPoint = new IPEndPoint(IPAddress.Parse("10.20.30.40"), RemotePort);
    Byte[] payload = ...
    udpClient.Send(payload, payload.Length, remoteEndPoint);
  }
}