当前位置:编程学习 > VB >>

vb下winsock UDP文件传输校验及速度控制问题

本帖最后由 jiedawushi 于 2011-01-23 12:42:12 编辑 还是tcp吧,UDP不靠谱。
要么你弄2个udp连接,一个专职发送文件,一个协调握手,看会不会快点? 看来楼主需要研究一下断点续传 回复#1楼 
我现在测得自己写的tcp程序从武汉电信到南昌电信速度只有10K,远远不到预期。我希望的速度在50K左右。

UDP主要就是一个速度控制问题。

回复#2楼
我觉得按照我的第一个模式,也就相当于在端点续传。 VeryCD的源代码是公开的,可以去下一个看看

引用 3 楼 jiedawushi 的回复:
回复#1楼 
我现在测得自己写的tcp程序从武汉电信到南昌电信速度只有10K,远远不到预期。我希望的速度在50K左右。

UDP主要就是一个速度控制问题。

回复#2楼
我觉得按照我的第一个模式,也就相当于在端点续传。
按LZ的意思看并不难做
不知道LZ研究过 比UDP TCP 再上一层的协议吗?
比方说是RTP、RSTP等流媒体协议,它在数据中加一个时间戳~~
LZ可以按照这个思路改一下,可以做简单的校验,来保证相对准确。

关于速度,对准确性要求高还是TCP,对速度、流量要求高就选UDP,这个没的说

尽管因特网中几乎 5 0%的数据包是4 0字节的短包,但这没有多大意义。因为这些数据包传送的不是用户数据而是T C P的管理信息。TCP传输效率是很低的~~

UDP 协议本身是没有速度控制的,但是我们可以在协议的上层进行控制,比方说控制数据分块儿的大小

多分一些数据块,速度就慢下来了~~接收处理比较慢可以这样设计,接收部分是主线程,把接收数据存在缓冲里,处理部分用ActiveX EXE 制作一个独立线程来处理。

端点续传,也要用缓冲~~只是可能没有复杂的处理。

有点乱~~
参考TCP协议的滑动窗机制,不必发一个包,等到应答才发一下个包。
其实很简单,将数据的收发和处理分割开来,就能避免处理过程影响收发效率了。

§收发程序
A)发送程序
 开一个定时器,定时扫描一下约定的发送目录,如果有内容,就发送一个文件(数据包)出去,并移除该文件。
B)接收程序
 只负责收到数据包,到约定的接收目录下保存成文件(每数据包一个)。

§发送端:
部署A用来发送数据包。
部署B用来接收反馈。
C)发送处理程序
 需要发送时将数据分包,全部丢到发送目录下。同时将这些文件复制在备份目录下备用,并维护一个列表,记录哪些数据包正在发送,并注明超时时间。
 也开一个定时器
  1)定时扫描一下接收目录,看看反馈过来哪些数据包对方已接收,从列表中删除,并且删除备份目录下的文件。
  2)看一下列表中哪些数据包超时而对方无反馈,从备份目录下复制这些数据包,重新丢到发送目录下。

§接收端:
部署B用来接收数据包。
部署A用来发送反馈。
D)接收处理程序
 开一个定时器,定时扫描接收目录,读取文件,解包、校验、后续处理等;一切无误后,作成一个反馈包,丢到发送目录下。

通过调整包的大小和定时器间隔,可以控制数据的传输速率。
注意C生成数据包的速度不要太快,否则积压在发送目录下尚未发出就被判定为超时了。

把协议方向改一下:

1 接收方发送接收第 N 包的请求。

2 发送方发送第 N 包。

3 如果接收方接收正确,则结束此包事务。否则再索取。

当然,此前会需要一个初始事务,让接收方知道有多少包。

对于发送方,不需要等待应答。只要接收方要,发给它就是了。
引用 7 楼 tiger_zhao 的回复:
其实很简单,将数据的收发和处理分割开来,就能避免处理过程影响收发效率了。

§收发程序
A)发送程序
 开一个定时器,定时扫描一下约定的发送目录,如果有内容,就发送一个文件(数据包)出去,并移除该文件。
B)接收程序
 只负责收到数据包,到约定的接收目录下保存成文件(每数据包一个)。

§发送端:
部署A用来发送数据包。
部署B用来接收反馈。
C)发送处理程序
 需要发送时……

好的,这几天我看看具体怎么操作
回复 8 楼 of123 的回复:
把协议方向改一下:

1 接收方发送接收第 N 包的请求。

2 发送方发送第 N 包。

3 如果接收方接收正确,则结束此包事务。否则再索取。

当然,此前会需要一个初始事务,让接收方知道有多少包。

对于发送方,不需要等待应答。只要接收方要,发给它就是了。

这个我试过了,这种用接收端请求数据的方式传输速度很慢的。
补充:VB ,  网络编程
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,