UDP组播是正确的选择吗?

时间:2012-05-26 03:40:52

标签: java sockets udp multicast

我的Java Socket经验有限,所有这些都使用TCP。我正在努力学习UDP。我正在运行使用UDP多播的多进程应用程序。经过一些简短的研究(以及我对该主题的新生理解),我认为多播将是正确的方法。

隐喻我希望所有进程共享相同的“空间”并且应该互相“喊”。因此,当进程1发送消息“hello”时,我希望所有进程2..n接收该数据包,反之亦然。

起初它似乎都在工作,但后来我意识到我有一个错误(如果你可以称之为)。我启动第一个进程,当我启动第二个进程时,第一个进程收到第二个进程,但反之则不然。

我想知道,当我在进程1上执行MulticastSocket receive()时,是否有效地将DatagramPacket从堆栈中移除,然后进程2看不到它何时执行recieve()

1 个答案:

答案 0 :(得分:2)

问题不在于协议的选择 - TCP / IP无济于事,UDP也不会播出。

问题是当当前没有任何内容正在侦听时,操作系统的网络堆栈不会缓冲网络流量。这就是第二个过程发生的事情。

简而言之,您的计划无法运作。


一种替代方案是让“新”进程多播“谁在那里”消息,并使所有其他进程响应多播或定向数据包。但是,你在这里重新发明轮子。在使用各种“中间件”堆栈之前,这个问题已经解决了很多次。