在我的机器上我有2个网卡。 我需要发送2个udp消息,但每个消息都将由不同的网卡发送。
我该怎么办?
答案 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);
}
}