You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Falcon.NET无法识别已存在的KNX IP端点问题求助

解决Falcon.NET KNX库IpDeviceDiscovery.DiscoverAsync返回空数组的问题

问题背景

使用Falcon.NET KNX库连接KNX IP端点时,隧道模式可正常通信,但调用IpDeviceDiscovery.DiscoverAsync()枚举设备时,Wireshark可捕获到UDP 3761端口的请求与响应,但返回结果始终为空数组。相关代码如下:

var ipDiscovery = new IpDeviceDiscovery
{
  Timeout = TimeSpan.FromSeconds(1)
};
var ipDeviceDiscoveryTask = ipDiscovery.DiscoverAsync(cancel);
var result = await ipDeviceDiscoveryTask.ToArray();

可行解决方向

1. 延长超时时间

当前设置的1秒超时可能过短,尤其是在网络存在延迟或设备响应较慢时。尝试将超时调整为3-5秒:

var ipDiscovery = new IpDeviceDiscovery
{
  Timeout = TimeSpan.FromSeconds(3) // 延长超时窗口
};

2. 指定本地绑定的网卡/IP

若运行程序的设备存在多网卡,IpDeviceDiscovery可能绑定到了无法接收KNX响应的网卡上。手动指定本地监听IP:

// 替换为本地能接收KNX设备响应的网卡IP
var localListenIp = IPAddress.Parse("192.168.30.100");
var ipDiscovery = new IpDeviceDiscovery(localListenIp)
{
  Timeout = TimeSpan.FromSeconds(3)
};

3. 排查取消令牌状态

确认cancel令牌没有在发现过程中被意外触发,可临时移除取消令牌测试:

var result = await ipDiscovery.DiscoverAsync(CancellationToken.None).ToArray();

4. 检查本地防火墙权限

即使Wireshark能捕获数据包,程序可能被防火墙阻止接收UDP 3761端口的入站响应。检查防火墙规则,确保程序允许接收该端口的UDP流量。

5. 手动实现KNX设备发现(绕过库的解析逻辑)

由于库的DiscoverAsync方法已混淆无法调试,可自行实现UDP发现逻辑:

using (var udpClient = new UdpClient(0))
{
    udpClient.EnableBroadcast = true;
    // KNX标准搜索请求包格式
    var discoverPacket = new byte[] { 0x06, 0x10, 0x02, 0x01, 0x00, 0x00 };
    var broadcastEp = new IPEndPoint(IPAddress.Broadcast, 3761);
    
    await udpClient.SendAsync(discoverPacket, discoverPacket.Length, broadcastEp);
    
    udpClient.Client.ReceiveTimeout = 3000;
    try
    {
        var response = await udpClient.ReceiveAsync();
        var deviceIp = response.RemoteEndPoint.Address;
        // 可根据KNX规范进一步解析响应包获取设备详细信息
        Console.WriteLine($"发现KNX设备:{deviceIp}");
    }
    catch (SocketException ex)
    {
        Console.WriteLine("未收到设备响应:" + ex.Message);
    }
}

内容的提问来源于stack exchange,提问作者Dmitri Nesteruk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 10:12:44