将UDP套接字绑定到多个端口

时间:2013-11-28 22:02:07

标签: java c udp multicast

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

我知道答案可能不是,但我需要这个。

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

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

我正在寻找Java解决方案,但如果可能只在C中,我将切换到那个。

请帮我解决这个问题。

修改

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

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

当多播流速率很低时,比如大约20 Mbps,一切正常。但是当多播流的速率非常高时,比如超过50 Mbps,即使有来自UDP的数据包,某些接收器线程也可能由于CPU而处于空闲状态。当线程空闲大约50毫秒(60 Mbps)时,在50毫秒内将会有大量数据,这将在最后一个队列中从该流中产生间隙。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您无法将套接字绑定到多个端口。但是,您可以在套接字上设置SO_TIMESTAMP套接字选项,这将使内核发送一个辅助控制消息,其中包含在该套接字上读取的最后一个数据包的接收时间。