问题标签 [multicast]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 多播+Linux内核
我对linux内核中的多播有一个疑问。当多播数据到达时,Linux 内核检查 MFC,如果未找到匹配的条目,则内核将控制消息缓存未命中和标头提供给用户空间。我的问题是数据包会发生什么?假设我可能故意不想将条目保留在 MFC 中,但我可能有一些其他表有转发信息,我想使用那个表,那么该怎么办?
问候,巴文。
macos - IPv6 多播寻址:是否所有“组 ID”都被视为有效/用户可分配?
我在程序的本地链接 IPv6 多播例程中看到了一些“有趣”的行为。似乎如果我设置了 112 位组 ID 字段的高 16 位中的任何一个,那么 MacOS/X 将不再接受这些多播数据包。我的问题是,这是 MacOS/X 网络堆栈中的错误,还是有某些原因设置组 ID 字段的高 16 位会影响路由行为?
更具体的信息如下:
从一台 Mac 多播到另一台 Mac 始终有效(在 10.5 和 10.6 上测试)
从 Linux 到 Windows 的多播始终有效
仅当多播地址中组 ID 的高 16 位设置为零时,从 Mac 到 Windows、Windows 到 Mac 或 Linux 到 Mac 的多播才有效。例如:
- 在“不起作用”的情况下,在 Mac 上运行的 WireShark 显示 Mac 已接收到多播数据包,但这些数据包从未传递到 Mac 上的接收应用程序。这是否意味着 Mac 网络堆栈存在错误,或者是否有一些我不知道的多播寻址更深层次的魔力?
c# - C# UDP 多播套接字 - 如何处理链接故障
我正在开发一个 UDP 多播库,并有一个关于如何正确处理链路故障、断开/重新连接的 NIC 电缆等的问题。
在我的测试中,我有以下设置:
- 2 台服务器 sA 和 sB
- sA 正在发送 UDP 多播数据,而 sB 正在接收多播数据
- 服务器通过第 2 层 Cisco 千兆交换机连接
例如,当我加入 sB 上的多播组时,我开始在该套接字上从 sA 的多播数据包接收数据。
现在,当我禁用/拔出绑定多播接收器 sB 的 NIC 时,我没有收到任何套接字级别错误(例如在 Socket.ReceiveAsync 中),我猜这是预期的,因为 UDP 是无连接的,但我希望我当多播接收器绑定到的 IP 变得不可用时,会收到某种通知/异常。
无论如何,当我重新启用该 NIC 时,尽管发送方仍在同一个多播组上发送,但我不再接收任何数据。我希望内核在硬件链接故障后实际上能够处理重新加入多播组,但看起来它没有。但是,由于我也没有收到任何套接字级别的错误,我真的不知道如何检测多播接收器的链接故障?是否需要设置某些套接字选项,以便内核重新加入多播组?到目前为止,我想出的唯一选择是侦听 System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged 事件,并在收到我必须绑定的本地 IP 再次可用的通知时尝试重新绑定。其他多播应用程序如何处理这种情况?
谢谢,
汤姆
applet - OpenSUSE 多播不工作?
我正在尝试通过受信任的 java applet<-> 在 OpenSuSE 上进行多播 dns,而我在网络上查找任何内容的尝试都被静默阻止了!可能是什么问题呢?
c# - C# UDP 解码数据报随机失败
我在多线程应用程序中遇到问题,过去 3 天一直在调试它,但终其一生都无法弄清楚。我正在写这个,希望我在输入这个时有一个 DUH 时刻,或者有人在我提供的代码片段中看到一些明显的东西。这是发生了什么:
我一直在研究一个新的 UDP 网络库,并且有一个数据生成器,它将 UDP 数据报多播到多个接收器应用程序。发送者在两个不同的套接字上发送,这些套接字绑定到单独的 UDP 多播地址和单独的端口。接收方应用程序还创建两个套接字并将每个套接字绑定到发送方的多播地址/端口之一。
当接收器接收到数据报时,它会从 MemoryStream 中的缓冲区复制它,然后将其放入线程安全队列中,另一个线程从中读取数据并从 MemoryStream 中解码数据。
两个套接字都有自己的队列。
现在发生的事情真的很奇怪,它是随机发生的,不可重现,当我运行多个接收器应用程序时,它只会不时地在其中一个上随机发生。
基本上,从队列中读取 MemoryStream 的线程,通过像 ReadInt32() 等 BinaryReader 读取它,从而解码数据。然而,当它时不时地读取数据时,它从中读取的数据是不正确的,例如发送者永远不会编码的负整数。
然而,如前所述,解码仅在一个接收器应用程序中失败,在其他应用程序中数据报解码良好。现在您可能会说,好吧,UDP 数据报可能存在字节损坏或其他问题,但我已经记录了每个传入的数据报,并在所有接收器上进行了比较,并且每个应用程序接收到的数据报都是完全相同的。现在它变得更奇怪了,当我将解码失败的数据报转储到磁盘并编写一个读取它并通过解码器运行它的单元测试时,它解码得很好。此外,当我在解码器周围包裹一个 try/catch 时,重置 catch 中的 MemoryStream 位置并再次通过解码器运行它,它解码得很好。更奇怪的是,这也只会在我绑定两个套接字以从发送方读取数据时发生,如果我只绑定一个,它不会
以下是一些与正在发生的事情相对应的代码:
这是套接字的接收回调:
这是一些解码数据的存根代码:
您在 catch{} 部分中看到,我只是将 MemoryStream.Position 重置为 0 并再次调用相同的方法,下次它就可以正常工作了吗?在这一点上我真的没有想法,不幸的是没有 DUH 时刻写这个。任何人都知道可能发生了什么,或者我还能做些什么来解决这个问题?
谢谢,
汤姆
c# - .NET 应用程序需要微秒延迟来限制 UDP 多播传输速率
我正在用 C# 编写一个 UDP 多播客户端/服务器对,我需要大约 50-100 微秒(微秒)的延迟来限制服务器传输速率。这有助于避免严重的数据包丢失,也有助于防止受磁盘 I/O 限制的客户端过载。请不要建议使用 Thread.Sleep 或 Thread.SpinWait。我不会问我是否需要其中任何一个。
我的第一个想法是使用某种高性能计数器并执行一个简单的 while() 循环检查经过的时间,但我想避免这种情况,因为它感觉很笨拙。这不会也与服务器进程的 CPU 利用率挂钩吗?
跨平台解决方案的奖励积分,即不是特定于 Windows 的。提前谢谢各位!
jboss - JBOSS AppServer 和 Client 之间通过组播进行通信
我是 JBOSS 的新手。我正在尝试编写一个 mBean,它将使用 JGroups 从 AS 内通过多播通道进行通信。我在我的 mBean 中使用的代码如下......
}
}
我还创建了一个正在侦听频道的客户端,但两者没有通信..这是频道的 XML ..
任何帮助将不胜感激,因为我已经为此花费了一些领带并试图解决这个问题。我更愿意使用其他一些通信机制,但是我仅限于使用多播......长篇大论......
谢谢!!!
〜螺栓
c# - 负载下的 UDP 组播性能
我有一个简单的 C# 应用程序,它在单接收方、单发送方场景中使用 UDP 多播。目标是在本地网络环境中尽可能快地传递消息。
我使用过 SocketAsyncEventArgs/SendAsync/ReceiveAsync、BeginSend/BeginReceive、Threads/Send/Receive,并尝试过 PGM 和 UDP 多播。
每次实现尝试都可以通过本地发送和本地接收重复传递最多约 1000 条消息。之后,性能开始呈指数下降。1000 条消息需要百分之几秒,而 10,000 条消息可能需要 2-10 秒。
有没有人有高性能 UDP/PGM 多播的经验?获得最大吞吐量的最佳设计是什么?
更新
现在,它只是一个在本地运行的程序——1 个应用程序,1 个发送者和 1 个接收者。测试消息为 4 个字节。
vb.net - 如何使用 TCP/IP 套接字将数据发送到 VB.NET 中的多个 IP?
我有一组 IP 地址,我想向所有这些地址发送相同的数据。我可以只发送发送数据的循环代码,但我认为有更好的方法来做到这一点。
我听说过多播,它到底是什么?我认为这是我需要的,但我该如何使用它。
linux - 多播 IP 地址 - 在调用 recvfrom 时被阻止
我正在编写一个简单的多播应用程序。我打算在本地主机上运行它。
我做了以下事情:
在实际代码中,我正在检查所有系统调用的返回值。问题是 recvfrom 没有返回。该进程在对 recvfrom 的调用中保持阻塞。
我尝试在不同的 shell 上运行该程序的两个实例。它没有帮助。
我也尝试将环回标志设置为 0,它没有帮助。
我想从本地主机运行这两个程序。
我使用的多播地址是我从书中看到的 239.255.1.2。我认为我们可以在进行所需的 setsockopt 调用时使用任何 D 类地址。
在端口 1025 上连接
运行 linux 内核 2.6.25
另外我如何检查多播支持是否已编译到内核中。
更新:
我确实在 shell 上 route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 。问题仍然存在。