我可以在多个端口上绑定UDP套接字吗?
我知道答案可能不是,但我需要这个。
我在不同的端口上有多个UDP(多播)流要接收,我希望不同流之间接收数据包的顺序是到达NIC的相同订单数据包。
使用套接字绑定到每个端口似乎是不可能的,因为从流中读取数据包的顺序将取决于UDP接收缓冲区以及如何执行线程以接收来自不同流的数据包。
我正在寻找Java解决方案,但如果可能只在C中,我将切换到那个。
请帮我解决这个问题。
修改
我需要的顺序,因为我正在开发MPEG TS(H.222)上的应用程序,它将从不同多播接收的TS流再分配到单个流(MPTS),然后作为单个流重新发送。我希望混合来自不同流的数据包的顺序非常准确,很少会出现故障。
如果我从多个多播中捕获数据包以便它们到达NIC,我可以获得准确的顺序,由于从源到我的应用程序的中间抖动,很少出现故障。很少出现故障不是问题。并且所有组播源和我的应用程序仅在LAN中。
当多播流速率很低时,比如大约20 Mbps,一切正常。但是当多播流的速率非常高时,比如超过50 Mbps,即使有来自UDP的数据包,某些接收器线程也可能由于CPU而处于空闲状态。当线程空闲大约50毫秒(60 Mbps)时,在50毫秒内将会有大量数据,这将在最后一个队列中从该流中产生间隙。
答案 0 :(得分:0)
Java和C与它无关。这是不可能的。套接字表示绑定到单个本地端口的端点。周期。
无论如何,也很难看出它如何解决你的问题。
答案 1 :(得分:0)
您无法将套接字绑定到多个端口。但是,您可以在套接字上设置SO_TIMESTAMP
套接字选项,这将使内核发送一个辅助控制消息,其中包含在该套接字上读取的最后一个数据包的接收时间。