java - 将 UDP 套接字绑定(bind)到多个端口

标签 java c udp multicast

我可以在多个端口上绑定(bind)UDP套接字吗?

我知道答案可能是否定的,但我需要这个。

我在不同端口上有多个 UDP(多播)流要接收,并且我希望不同流之间接收数据包的顺序与到达 NIC 的数据包顺序相同。

将套接字绑定(bind)到每个端口似乎是不可能的,因为从流中读取数据包的顺序将取决于 UDP 接收缓冲区以及执行线程以从不同流接收数据包的方式。

我正在寻找 Java 中的解决方案,但如果仅在 C 中可能,我将切换到该解决方案。

请帮我解决这个问题。

编辑

我需要的顺序,因为我正在开发 MPEG TS (H.222) 上的应用程序,它将将从不同多播接收的 TS 流重新复用为单流 (MPTS),然后作为单流重新传输。我希望以非常准确的顺序混合来自不同流的数据包,很少出现乱序。

如果我从多个多播中捕获数据包,以便它们到达 NIC,我可以获得准确的顺序,很少会由于从源到我的应用程序的中间抖动而出现乱序。很少出现故障不是问题。所有组播源和我的应用程序都仅在 LAN 中。

当多播流的速率较低(例如 20 Mbps 左右)时,一切正常。但是,当多播流的速率非常高(例如超过 50 Mbps)时,某些接收器线程可能会由于 CPU 的原因而处于空闲状态,即使它有从 UDP 获取的数据包。当线程空闲大约 50 毫秒(速度为 60 Mbps)时,50 毫秒内将会产生大量数据,这将在最终队列中的该流中产生该时间的间隙。

最佳答案

Java和C与此无关。这是不可能的。套接字表示绑定(bind)到单个本地端口的端点。期间。

无论如何,也很难看出它如何解决您的问题。

关于java - 将 UDP 套接字绑定(bind)到多个端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20275365/

相关文章:

java - 我可以将 myBatis 配置为使用构建器模式创建类的实例吗?

c++ - 动态分配C结构?

windows - 如何加速 Windows XP 应用程序中的 UDP 通信

c++ - UDP 数据报计数

Java 类方法未定义

java - 如何创建带有数据库的 .jar?

c - c中的动态数组初始化

java - 服务器UDP和端口绑定(bind)

java - 将十六进制转换为字节的字节到十六进制反转程序

c++ - 如何使用单一职责原则