原因:电脑同时存在多个网卡可用时,UDP广播默认只走一个网卡,造成扫描的结果无法达到目的
实现
全局变量
Thread _receiveMessage;
UdpClient _udpClientRec;
IPEndPoint _ipEndPointSR;
IPEndPoint _ipEndPointS;
构造
_ipEndPointSR = new IPEndPoint(IPAddress.Any, “你的端口号”);
_ipEndPointS = new IPEndPoint(IPAddress.Broadcast, “你的端口号”);
_receiveMessage = new Thread(ReceiveUdpPacket);
_receiveMessage.Start();
SendUdpBroadcastPacket();
SendUdpBroadcastPacket
private async void SendUdpBroadcastPacket()
{
Microsoft.VisualBasic.Devices.Network network = new Microsoft.VisualBasic.Devices.Network();
if (!network.IsAvailable)
{
return;
}
try
{
List<IPAddress> iPAddresses = GetAllAdaptersIPAddress();
foreach (var item in iPAddresses)
{
using (UdpClient udpClient = new UdpClient(new IPEndPoint(item, "你的端口号")))
{
_ = udpClient.Send("数据流列表", "数据流列表长度", _ipEndPointS);
}
}
}
catch (Exception ex)
{
}
}
GetAllAdaptersIPAddress
private List<IPAddress> GetAllAdaptersIPAddress()
{
List<IPAddress> iPAddresses = new List<IPAddress>();
var interfaceList = NetworkInterface.GetAllNetworkInterfaces();
foreach (var adapter in interfaceList)
{
if (adapter.Description.Contains("Loopback")) continue;
if (adapter.OperationalStatus == OperationalStatus.Up)
{
var addresses = adapter.GetIPProperties().UnicastAddresses;
foreach (var ip in addresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
iPAddresses.Add(ip.Address);
}
}
}
}
return iPAddresses;
}
ReceiveUdpPacket
private void ReceiveUdpPacket()
{
try
{
_udpClientRec = new UdpClient(_ipEndPointSR);
while (true)
{
byte[] data = _udpClientRec.Receive(ref _ipEndPointSR);
DispatcherInvoke(() =>
{
});
Thread.Sleep(20);
}
}
catch (Exception ex)
{
}
}