控制将发送UDP消息的网卡

时间:2015-11-18 07:39:12

标签: c# .net

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

我该怎么办?

1 个答案:

答案 0 :(得分:2)

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

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