UDP 高速文件传输

来源:互联网 发布:小米擦除数据 编辑:程序博客网 时间:2024/04/25 02:43

局域网多线程安全 UDP 高速文件传输技术。

UDP 传输速度的关键在于两个要素:
 (1)发送端的发送时间间隔
 (2)发送数据包的大小
udp 最大包64K,除了其它一些控制信息外,真正的数据大小,达不到64K。
    在设计数据结构时需要考虑这些因素。

该技术涉及一种实现可靠UDP传输的拥塞控制方法,是一种端到端的控制机制,
主要对接收端和发送端的控制策略来实现在UDP协议下的端到端拥塞控制;

采用了简单的滑动窗口协议。

通过计算发送端和接收端往返时间间隔,来动态调整发送端的发送速率。

Socket 模型采用异步消息,非阻塞方式,IO模型对传输速度影响很大。


拥塞控制方法:
  设定一个窗口大小,发送端发送完窗口内所有包后,计算丢包率,然后动态调整发送时间间隔。
  丢包个数,以及哪些包丢失,由接收端来通知发送端,发送端只管时间间隔发送即可。
  如果发送端发现本次没有丢包,则继续发送下面的包。
  当一个窗口完全正确发送后,重新计算RTT,根据当前网络拥塞状况,调整发送间隔。
 
 
delphi7,delphi2007 可以直接编译,没有采用任何第三方控件。delphi2010,2009 需要修改Pchar 为 PAnsiChar;
表格控件采用 TStringGrid 可以显示进度条,列标题,行选,进度,都是用图片贴上去的。
本来可以增加排序,Chcekbox,只是目前把这些功能屏蔽了。
StringGird 本人做过深入研究,主要是美化,海量数据的显示速度问题。可以实现视口区域的刷新显示,
在海量数据下速度不受任何影响。

该程序就一个 exe 既是客户端又是服务器端,采用上线通知,下线通知的方式。只要用户上线下线,
用户列表中会自动添加或删除。(学习了一下飞鸽)。我还写了一个完全由TCP来实现的程序,采用了内存映像,缓存机制,
只是没有udp快,有些地方还需要优化,太懒了实在不想优化了。
该算法比较友好,不会去拼命抢夺网络资源。

该程序还有许多需要改进的地方:
1.对超过4G的文件没有测试过,不知道支不支持。
2.没有增加发送端中断发送的操作,接收端中断接收的操作。原来有去掉了,现在懒得加了。
3.没有控制发送,接收线程数量。
4.没有增加动态判断当前网络类型。局域网还是广域网,类似QQ,可以动态调整发送包的大小,以使用广域网的发送。
5.没有增加数据校验机制,可以在每个包内增加一个字段校验码。

该程序只在局域网内测试过,而且还不完善,如果要在广域网使用,需要修改数据包大小。目前包大小是固定的。

该程序完全是兴趣所致,仅供学习。

 

 

原创粉丝点击