如何才能在传送文件中更有效率

frman 2006-02-19 02:03:02
自己写了个利用TCP传送文件的模块,但在实际传送中速度却很慢。大概只有同等网络条件下QQ文件传送速度的1/3

除了设置socket的缓冲和TCP的窗口大小外 有什么东西对文件传送速度影响最大?
我在实际实现中是用ReadFile读一段 然后发送出去,收到后在WriteFile。

比较高效率的实现应该是怎样的呢?他们采取的什么方法?
...全文
182 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
foxqwx 2006-02-22
  • 打赏
  • 举报
回复
建议先采用wupangzi(无本之木) 的方法进行分析一下,找出问题的症结所在,然后再对症下药。
另外,可以考虑的策略有:
1、空间换时间,加大接受和发送端的缓存;
2、缓存策略要设置好,减少动态分配和回收内存的次数;
3、多socket,多线程,分别读取文件各段,数据分块传输,编号,然后在服务器端重组,按序写入。
wupangzi 2006-02-20
  • 打赏
  • 举报
回复
在网络状况良好的情况下,我个人认为影响速度的原因可能是读和写文件引起的!
你可以先在读数据、发数据、收数据和写好数据的时候分别用时间打印出来分析一下,时间花费大概多少!
如果确实是读写引起的,你可以把读、发、收、写分别用一个独立的线程进行操作!
huangwc 2006-02-20
  • 打赏
  • 举报
回复
你可以多个线程将数据分块传输
就跟flashget一样
然后在接收段将数据重组
frman 2006-02-20
  • 打赏
  • 举报
回复
我说的是传送单一文件
这也需要开多线程吗?多个线程传送文件的不同部分?这样会有效率?

另外QQ传送文件是TCP,你可以随便开个防火墙看看
striking 2006-02-20
  • 打赏
  • 举报
回复
mark
an_bachelor 2006-02-19
  • 打赏
  • 举报
回复
當然多綫程需要開多個socket傳 另外QQ傳文件用的是UDP
frman 2006-02-19
  • 打赏
  • 举报
回复
为什么带星星的都喜欢抛出句话就闪

我一共操作一个socket还要怎么多线程?
是指网络收发和磁盘操作分开吗?
xuzheng318 2006-02-19
  • 打赏
  • 举报
回复
用多线程!
frman 2006-02-19
  • 打赏
  • 举报
回复
在收发操作上我采用重叠I/O,主要就是为主线程可以随时终止收发操作
但我只使用一个overlapped结构,直到WSAGetOverlappedResult()成功后才进行第二个操作。

你的意思是要我用多个overlapped结构一次进行N个收发操作吗?
在只使用一个socket情况下这样会有帮助吗?
DentistryDoctor 2006-02-19
  • 打赏
  • 举报
回复
考虑多线程及异步IO。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧