gpt4 book ai didi

Java多播: How to test on localhost?

转载 作者:太空宇宙 更新时间:2023-11-04 09:46:56 25 4
gpt4 key购买 nike

我正在尝试使用客户端和多个服务器在 Java 中实现多播应用程序。客户端将通过 MultiacastSocket 发送数据报,所有加入组的服务器都应该接收该数据包。然后所有服务器都应该做一些事情并向客户端返回单播答案。像这样:enter image description here

我的实现看起来像这样,客户端有一个 MulticastSocket,服务器只有 DatagramSocket。对我来说最大的问题是,如何设置服务器的组 ID 和端口号,以便我可以在本地进行测试?我尝试在客户端和服务器上使用不同的端口以及相同的组 ID localhost,但这不起作用。还尝试了socket.setLoopbackMode()和socket.setInterface(InetAddress.getLoopbackAddress())。但我被困在某个地方,一些建设性的意见会很棒。

最佳答案

不幸的是,它依赖于平台。您可以尝试将发送和接收套接字绑定(bind)到环回接口(interface),但效果会有所不同。此技巧适用于 Windows,具体取决于您的网络设置方式。经过一系列神秘的参数调整后,我让它在 SUSE Linux 上运行,但这至少是十年前的事了。

环回接口(interface)很特殊(例如,通常更高的MTU、纯粹在软件中实现、传出消息直接移入传入队列等),因此有时正常的网络规则不适用。

跨平台统一工作的一件事是使用物理网络并对传出数据包施加限制。为了进行测试,我通常采用的一个技巧是将传出数据包的 TTL 设置为 1 (MulticastSocket.setTimeToLive(1);)。这样,数据包就不会通过任何路由器。此外,您还需要确保在同一子网上执行的其他测试不会干扰您的测试。为此,我通常使用多播地址随机发生器生成 224.1.1.1 和 239.254.254.254 之间的地址。该地址空间应该足够大以避免冲突。您还需要确保您的随机发生器避免 reserved多播地址或各种奇怪的行为可能会开始在您的环境中出现。

还有 MulticastSocket.setLoopbackMode(boolean),但我发现它也依赖于平台(尽管不像使用环回那么严重,而且公平地说,这是很久以前的事了,现在可能会工作得更好),因此可能需要对操作系统进行一些调整。

关于Java多播: How to test on localhost?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55308730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com