0

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

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

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

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

4

1 回答 1

2

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

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

简而言之,你的方案行不通。


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

于 2012-05-26T03:48:15.923 回答