作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在一台 VM Ubuntu 16.04 机器上的 100 个多播组上生成 UDP 数据包,并在另一台 VM Ubuntu 16.04 机器上订阅这些组。两者都在由 Hyper-V 管理器运行的 HP 服务器上。问题是我的应用程序只收到 100 个组中的 2 个。但是,当 Wireshark 捕获时,应用程序开始接收所有消息。
我发现了其他几个类似的问题,例如 this one ,它解释了因为 Wireshark 以混杂模式运行,它允许所有数据包通过(通过什么?),这解释了为什么我的应用程序也开始“看到”它们。因此,将以太网接口(interface)配置更改为混杂模式允许应用程序在不运行 Wireshark 的情况下接收所有消息。
但是其他没有正常接收的数据包有什么问题呢?我试图交叉验证“好”和“坏”消息的十六进制转储,它们似乎没有什么不同。 IP 和 UDP 级别的校验和是正确的。还有什么问题?
最佳答案
听起来好像您没有将它们告诉内核。
见 http://tldp.org/HOWTO/Multicast-HOWTO-6.html
您必须使用 setsockopt
与 IP_ADD_MEMBERSHIP
.并确保为您的本地接口(interface)使用正确的值。
关于sockets - 仅在混杂模式下接收的 UDP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45639553/
我是一名优秀的程序员,十分优秀!