首页
社区
课程
招聘
[原创]UDP稳定传输模块共享,附源码
发表于: 2014-5-11 17:42 10693

[原创]UDP稳定传输模块共享,附源码

2014-5-11 17:42
10693

一直以来都从看雪上做伸手党,今天也共享一点吧。能力有限,封装还凑合,代码可能还有问题,但是传输应该不会出现太大问题。该模块是用于我一个工程上的,所以在看文档上也不用有太多疑惑。
如果能给个精的话,那当然最好了,哈哈。

UDP低速率传输隧道的实现:

  由于UDP是不可靠的传输协议,无序并且不稳定,在传输机制中,我们更改了以往的传输机制,为了使其稳定并且可靠,将该传输模块设计为缓冲池传输方式。
      在传输时,模块会自动计算文件的大小,并计算切割数量。同时,维护一个缓冲池队列用于准备改文件的数据;在接受端,会监听17173号端口,等待的数据到来。一切准备工作就绪后,发送端首先进行会话,告诉接收端这边数据的实际情况,之后开始发送数据。数据的传输机制是:(1)循环发送每个缓冲池(2)每发送完一个缓冲池之后进行等待,如果接受端反馈重发请求,则将重发序号在缓冲池中进行索引,指针跳转到响应的数据节点,将补充的数据进行重传,若接受到“块接受完毕”的消息,则发送下一个缓冲池。

传输方式的优缺点

优点:
独立于主进程的传输工作,不依赖主进程的网络协议以及数据中心
打破了传统的TCP传输方式
实现了稳定可靠的传输环境
为以后的程序提供可靠的传输模块,实现代码复用

缺点:
  传输速率较低,经过测试,传输速度大概在53kb/s

具体文档,以及代码,可执行程序请看附件。
编译环境vs08。

http://pan.baidu.com/s/1hqeKgBE
解压密码:123


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 4
支持
分享
最新回复 (10)
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
来占个沙发
2014-5-11 17:45
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多谢楼主分享,好好学习一下
2014-5-11 17:50
0
雪    币: 6525
活跃值: (3398)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
你把工程里没用的文件删了,就能上传到论坛了,放网盘里也许有一天链接就失效了
2014-5-11 17:57
0
雪    币: 8188
活跃值: (2842)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
5
udp在实际互联网上使用不是单单写个可靠udp就行的,要考虑很多可怕的网络环境,例如**的各种小宽带对端口的处理。另外如果实际产品使用,这个不如udt,使用crc应该也会比md5要快,也可以减少头大小,用一个DWORD就可存储crc值。谢谢分享。
2014-5-11 18:15
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
6
处理选择和实际需求有关,如果仅仅是xx 的和 商用 区别还是很大,有的是够用即可,有的是不能忍受半点速度问题
2014-5-11 19:06
0
雪    币: 19
活跃值: (130)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
怪不得当时上传失败呢。
2014-5-11 20:21
0
雪    币: 19
活跃值: (130)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
受教了,感谢内核大神指点。
2014-5-11 20:40
0
雪    币: 19
活跃值: (130)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
模块的带宽还没处理好,要调整带宽只能手动去更改里面的SLEEPTIME以及每个数据包的大小才行。只不过项目对传输速率没要求,也就无所谓了。
2014-5-11 20:44
0
雪    币: 9941
活跃值: (2143)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10


正好用得上
2014-5-14 08:25
0
雪    币: 209
活跃值: (143)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
最终的udp可靠传输做下来,其实就是对tcp的实现和改进。滑动窗口、重传、慢启动等tcp特性都要实现,在重传、多播方面又可以改进。不是一件容易的事
2014-5-14 09:34
0
游客
登录 | 注册 方可回帖
返回
//