我正在为我经常使用的某些设备开发自动发现客户端,而我遇到的问题是某些用户 UDP数据包未被发送(它不会出现在Wireshark)。
它背后的代码相当简单,我认为它与Windows防火墙有某种关系,但到目前为止我找不到解决方案。
有人可以就接下来的步骤提出任何建议吗?
相关代码:
function operation(callback) {
var a = 0;
var b = 1;
a = a + b;
a = 5;
// may be a heavy db call or http request?
// do not return any data, use callback mechanism
callback(a)
}
operation(function(a /* a is passed using callback */) {
console.log(a); // a is 5
})
答案 0 :(得分:1)
确实出现了使用
Udp.Client.Bind(new IPEndPoint(IPAddress.Any, 12345));
允许Windows决定要绑定到哪个适配器。我能够使用以下代码获取适配器IP地址列表,并创建一个绑定到每个地址的UdpClient。
private List<IPAddress> GetEndpoints()
{
List<IPAddress> AddressList = new List<IPAddress>();
NetworkInterface[] Interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach(NetworkInterface I in Interfaces)
{
if ((I.NetworkInterfaceType == NetworkInterfaceType.Ethernet || I.NetworkInterfaceType == NetworkInterfaceType.Wireless80211) && I.OperationalStatus == OperationalStatus.Up)
{
foreach (var Unicast in I.GetIPProperties().UnicastAddresses)
{
if (Unicast.Address.AddressFamily == AddressFamily.InterNetwork)
{
AddressList.Add(Unicast.Address);
}
}
}
}
return AddressList;
}