作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 Java Socket 经验有限,并且全部使用 TCP。我正在尝试学习UDP。我正在运行一个使用 UDP 多播的多进程应用程序。经过一些简短的研究(以及我对该主题的初步了解),我认为多播将是正确的方法。
打个比方,我希望所有进程共享同一个“房间”,并且应该互相“喊叫”。因此,当进程 1 发送消息“hello”时,我希望所有进程 2..n 都接收到该数据包,反之亦然。
起初一切似乎都正常,但后来我意识到我有一个错误(如果你可以这样调用它)。我启动第一个进程,当我启动第二个进程时,第一个进程收到第二个进程的消息,但反之则不然。
我想知道,当我在进程 1 上执行 MulticastSocket receive()
时,是否有效地将 DatagramPacket
从堆栈中取出,然后进程 2 何时看不到它是recieve()
吗?
最佳答案
问题不在于协议(protocol)的选择 - TCP/IP 没有帮助,UDP 广播也没有帮助。
问题是当当前没有任何东西在监听时,操作系统的网络堆栈不会缓冲网络流量。这就是第二个过程所发生的情况。
简而言之,你的方案行不通。
<小时/>一种替代方法是让"new"进程多播“谁在那儿”消息,并让所有其他进程以多播或定向数据包进行响应。然而,你在这里重新发明轮子。这个问题之前已经通过各种“中间件”堆栈解决过很多次。
关于java - UDP 组播是正确的选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10763409/
我是一名优秀的程序员,十分优秀!