用定时记录和重放UDP数据包

时间:2014-07-10 09:58:47

标签: c# sockets record timing replay

我需要实现一种记录UDP流的方法,以便稍后根据请求重播该流。这个记录和重放必须使用相同的时间(达到合理的分辨率,人类用户几乎感觉不到,让我们说10毫秒):如果原始流有00:00到00:35的数据,那么去了静音到00:55,然后从00:55到01:34发送更多数据,当我的应用程序重放该流时,必须遵守相同的分配。

如果只是将udp流保存到磁盘然后重放它,没有这个时间,使用Socket,NetworkStream或UdpClient就可以了。问题是我无法绕过设计一种方法来修改标准接收算法,以便以某种方式包含该时序,以便稍后由发送算法轻松重放。作为奖励,还应支持在任何时间开始重播的方式(例如,从00:15开始)。

1)有没有办法在C#上轻松实现这个功能?我们对此没有任何严重的非功能性要求,我们只需要它就可以简单地工作。任何关于实现它的方法的提示都会非常感激。

2)如果这确实不是一件简单的事情,并且任何人都建议使用任何第三方组件,那么要求它具有C#的API(或从代码操作组件的方法) ,希望是开源或自由使用的软件。

非常感谢。

1 个答案:

答案 0 :(得分:1)

这不完全是C#的原生功能。但我会尝试做你的功课。

我攻击它的方式仍然是将数据包存储到磁盘。设计二进制格式的自定义文件结构,保存有关收到数据报的时间的数据,然后是UDP数据报本身。然后,您可以让程序读取此文件,找出UDP有效负载的交付时间。这将为您提供重播数据包并存储它以便以后重播所有本机C#代码所需的内容,无需第三方模块。这当然要求您知道写入/从文件写入并能够将相关数据解析为C#中的类型化对象(Timespan,可能是数据报的byte []等)。所有这些决定都取决于你,程序编写者。

它的长短是我99%肯定没有这种要求的原生功能。这正是编程语言存在的原因。因此,作为程序员,我们可以为客户/客户/教师提供出色的解决方案;)