Java UDP多播是正确的选择?
我有有限的Java套接字经验,所有这些都是使用TCP的。我正在努力学习UDP。我正在运行一个使用UDP多播的多进程应用程序。经过一些简短的研究(以及我对该主题的初步理解),我认为多播将是合适的方法 打个比方说,我希望所有进程共享同一个“房间”,并且应该互相“吼叫”。因此,当进程1发送消息“hello”时,我希望所有进程2..n都接收该数据包,反之亦然 起初,这一切似乎都在运行,但后来我意识到我有一个bug(如果你可以这么说的话)。我启动第一个进程,当我启动第二个进程时,第一个进程接收第二个进程的消息,但反之亦然Java UDP多播是正确的选择?,java,sockets,udp,multicast,Java,Sockets,Udp,Multicast,我有有限的Java套接字经验,所有这些都是使用TCP的。我正在努力学习UDP。我正在运行一个使用UDP多播的多进程应用程序。经过一些简短的研究(以及我对该主题的初步理解),我认为多播将是合适的方法 打个比方说,我希望所有进程共享同一个“房间”,并且应该互相“吼叫”。因此,当进程1发送消息“hello”时,我希望所有进程2..n都接收该数据包,反之亦然 起初,这一切似乎都在运行,但后来我意识到我有一个bug(如果你可以这么说的话)。我启动第一个进程,当我启动第二个进程时,第一个进程接收第二个进程的
我想知道,当我在进程1上执行
MulticastSocket receive()
时,是否有效地将DatagramPacket
从堆栈中移除,然后进程2在执行时看不到它是receive()
问题不在于协议的选择——TCP/IP没有帮助,UDP广播也没有帮助
问题是操作系统的网络堆栈在当前没有监听网络流量的情况下不会缓冲网络流量。第二个过程就是这样
简而言之,你的计划行不通
一种替代方法是使用“新”进程多播“谁在那里”消息,并让所有其他进程用多播或定向数据包进行响应。然而,你正在重新发明轮子。这个问题以前已经用各种“中间件”堆栈解决过多次。感谢您快速而彻底的回复。我想我会实施“谁在那里”计划/