免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: me09
打印 上一主题 下一主题

原创:如何做linux下udp大文件传输 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-05-13 15:47 |只看该作者
如果偶尔出现了包的到达顺序错乱,你怎么处理的?

论坛徽章:
0
12 [报告]
发表于 2006-05-13 16:19 |只看该作者
此段代码如按楼主说所 "可以解决丢包问题的代码级实现方法",实在没看出来处理的代码在哪..
受楼主所骗,仔细分析了发送端和接收端代码,
关于udp的发送端,有几处不明白的地方,望大家有清楚的解释一下:


#define MAX_SIZE 1024*40
如上,代码中将读取文件的buf设为 40KB,
然后:
rlen = read(fd,buf,MAX_SIZE);
...
wlen = write(sockfd,buf,rlen);
如上,一次性将40KB的数据送给协议栈,由协议栈来分片发送出去...
这样即使可行的话,但可靠吗?从来没有在应用层上面这样写过代码,哪位能指点一下.


usleep(500);
代码中在每发送40KB的数据后就等待0.5毫秒,
但实际在i386的linux平台下面,usleep(500) 的结果和usleep(1)的结果是一样的,都是毫秒级的等待,
所以如果不加这句代码,是不是可以大大加速发送率.

论坛徽章:
0
13 [报告]
发表于 2006-05-13 22:35 |只看该作者
多谢楼主

论坛徽章:
0
14 [报告]
发表于 2006-05-14 22:38 |只看该作者
这样直接用UDP传数据而且没有检验机制肯定是不行的,万一有一个包在传输中丢掉那所有传输就都白费了,还是用tcp好一点

论坛徽章:
0
15 [报告]
发表于 2006-05-15 09:48 |只看该作者
好,厉害等我时间充足的时候我也给大家弄个其它的代码!

论坛徽章:
0
16 [报告]
发表于 2006-05-15 11:45 |只看该作者
文件内容中含有“end”,该如何处理?

论坛徽章:
0
17 [报告]
发表于 2006-05-15 13:00 |只看该作者
UDP不能用来做大文件可靠传输。
比TCP速度快,可以用来做“出错无所谓,但必须延迟小”的场合,比如语音,视频,聊天等。
传大文件不可以。

要知道,实验证明可以是远不够的,必须原理上可以。如果原理上不行,但实验证明没有问题,那是因为实验做的不够。

论坛徽章:
0
18 [报告]
发表于 2007-08-14 15:04 |只看该作者
怎么我运行有错误呀...

楼主帮帮忙呀....
我加了#include<sys/sta.h>....

没有用呀....

udpserv3.c: 在函数 ‘recvUDP’ 中:
udpserv3.c:23: 错误:‘S_IRUSER’ 未声明 (在此函数内第一次使用)
udpserv3.c:23: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
udpserv3.c:23: 错误:所在的函数内只报告一次。)
udpserv3.c:23: 错误:‘S_IWUSER’ 未声明 (在此函数内第一次使用)
make: *** [udpserv3] 错误 1

论坛徽章:
0
19 [报告]
发表于 2007-08-15 10:57 |只看该作者
原帖由 yulc 于 2006-5-13 16:19 发表
此段代码如按楼主说所 "可以解决丢包问题的代码级实现方法",实在没看出来处理的代码在哪..
受楼主所骗,仔细分析了发送端和接收端代码,
关于udp的发送端,有几处不明白的地方,望大家有清楚的解释一下:


#de ...



发多大都可以,只要缓存区够大,

论坛徽章:
0
20 [报告]
发表于 2007-08-16 02:23 |只看该作者
在环境好局域网内楼主的程序可能工作得很好.不过网络环境差点就难说了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP