我有一个运行自定义UDP服务器的双节点集群。群集具有公共IP地址,并且每个节点在同一子网中具有自己的专用IP地址。
UDP服务器绑定到通配符地址,因此它可以从公共或私有IP接收数据报。问题是我无法控制发送回复的IP选择。无论出于何种原因,它似乎默认使用私有IP。
现在,如果客户端只是向服务器发送命令并在同一端口上侦听回复,那么这不是问题。但是,某些客户端使用connect()调用,这限制了它们从首先发送命令的地址接收回复。如果他们向公共IP发送命令并在另一个IP上接收答案,他们就会忽略它。值得注意的例子是Nagios的check_udp插件。
服务器使用普通的旧java.net.DatagramSocket用Java编写。我没有在DatagramPacket类中看到任何方法来获取收到数据包的本地IP地址。
我能做什么:
这里有什么我想念的吗?它似乎不应该是一项非常艰巨的任务,但我似乎并没有找到一个简单的解决方案。
答案 0 :(得分:0)
我会修改(或包装到传输消息中)通过UDP套接字发送的消息,以包括发送它的人(身份)。
这与其他网络库(0MQ专门命名一个)处理此消息的来源以及响应问题的位置相同。