首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

多条Tcp连接同时工作,怎么使得数据块按序到达

2012-01-21 
多条Tcp连接同时工作,如何使得数据块按序到达?假设有一串数据流在服务器上被按序切分为1.dat、2.dat、3.dat、

多条Tcp连接同时工作,如何使得数据块按序到达?
假设有一串数据流在服务器上被按序切分为1.dat、2.dat、3.dat、4.dat……这样的小文件(平均大小为700k左右),每个文件的大小都不相同(差别不超过100k)。 现在有3条Tcp连接同时去服务器从小到大取文件,问,如何使3条连接请求的文件尽可能的按顺序到达?(注:由于文件大小及当前带宽的影响很可能会出现文件1比文件2先去请求,而文件2先到达的情况,怎样尽可能的让文件1先到达,即便文件2的大小要小于文件1)。

[解决办法]
干脆用一个连接
[解决办法]
如果只有一条网线,一块网卡的确没有必要用三条TCP连接,无论多少个连接最终都是从一块网卡走出,并且有不同线程的维护开销,估计是会慢的。用讯雷等下载需要多开线程更快些,是因为服务器端的程序是按时间块轮响应每一个客户的,所以你多连接些会被照顾的次数多些,下载的就快了些。
[解决办法]
如果的确需要三条连接,我想你让依次到达的原因是因为要依次写入一个文件里。其实也大可不必按序到达,w你只要在每次发送数据前加一文件头,说明文件总大小、文件序号及大小,本块大小和偏移,然后加真实数据发送。接收时把它加入到接收到的数据链表中。再有一线程可以从链表中获取数据,然后依次把数据写入文件。只须注意一下线程的同步问题。用内存映射文件,会更方便些。
[解决办法]
楼主提的问题是基本无法实现的。。。。除非这样:如果已经接收了1数据包,接收线程可以不断判断收到的数据包号,如果是2则接收,如果不是则丢弃。。。。。但是这样效率太低了。。。。


我建议还是采用来一个数据包,就接收一个,等接收完了进行排序就可以了。
[解决办法]
其实根本不需要用多个TCP来收文件, 假如真那么想按顺序收到文件, 也很简单的.

后面的2, 3, 4的接收线程, 2总是等待1完成了才返回, 3则总是等待2完成才返回, 4则总是等待3完成才返回. 然后你就可以直接按顺序开启线程1,2,3,4, 然后直接等待线程4结束返回的数据, 也就代表前面的1,2,3都收齐了.

热点排行