java程序引用三方组件bacnet4j 和设备进行BacNet协议通讯时,发现在Windows环境运行正常,在ubuntu下确握手失败
代码类似这种写法
抓包如下
可见两次java程序发出的who-Is报文,设备都回复了i-Am报文, 然而程序里面并没有收到。
未收到的原因是监听的ip地址不对,设备回复的报文地址是广播地址,监听本机ip地址是无法收到的。
解决方法是去掉withLocalBindAddress 这一行,默认监听的是"0.0.0.0"这个地址,就可以收到了。
至于Windows环境下为啥可以正常运行不得而知,可能是Windows的UDP 协议栈实现原理不同