我现在使用VC6.0+WINSOCK写了一个FTP程序,包含服务器和客户端程序,有4000多行代码。
传输几百K的数据没问题,但是用来传输100多M的数据时,效率太低了。
请问应该如何设置SOCKET以及传输与接受方面的代码???
我现在的方法是每次发送2K的数据,发送端就Sleep(200).我如果将发送数据改大的话,就会导致接受端不能完整收到所有数据,可能是接受缓冲区溢出吧!唯一解决办法就是Sleep值调大。能否调用SETSOCKOPT增加缓冲区大小?
目前实验结果:发送3.63M要8分钟。太慢了。
请高手告诉我专业的FTP的传输是如何设置的???
传输几百K的数据没问题,但是用来传输100多M的数据时,效率太低了。
请问应该如何设置SOCKET以及传输与接受方面的代码???
我现在的方法是每次发送2K的数据,发送端就Sleep(200).我如果将发送数据改大的话,就会导致接受端不能完整收到所有数据,可能是接受缓冲区溢出吧!唯一解决办法就是Sleep值调大。能否调用SETSOCKOPT增加缓冲区大小?
目前实验结果:发送3.63M要8分钟。太慢了。
请高手告诉我专业的FTP的传输是如何设置的???
数据包大小1k就可
是不是要将套接字的缓冲区设置以下 啊?
难道我还要做吗?!
他有可能用UDP呀.
你的办法我试试
你的办法你试过吗?
我可帮你试了,比我原来的还慢!
在TCP层上再加应用层的确认控制,虽然解决了不用Sleep,但每次发送要等待一次TCP传输,若是在网速慢的环境里就更悲惨了!
既然是FTP协议,一定要等到对方回复以后才发送下一个包,在套接字缓冲区内根本不会淤积数据的。再说网络传输速度要比硬盘读写数据快多了,你拷贝一个文件也没有那么慢啊!
我怀疑你的程序可能有问题。
既然是FTP协议,一定要等到对方回复以后才发送下一个包.
你是在哪找到这句话的???
这是TCP的协议规定的啊!而FTP是建立在TCP基础上的,本身包括2个TCP连接:控制连接和数据连接。数据连接是用来临时传输数据的。它自身就在做数据确认工作。我已经说过了在程序中再做这种数据回复确认工作,是在降低效率。TCP就是因为这传输效率才低于UDP的,但保证了可靠性。我用C++Builder中的TClientSocket和TServerSocket组件做过实验,调用它的SendStream()传送3.63M也要5分钟,只比我现在的快1分钟而已。(在相同的环境下)这又做何解释了???
你还是好好看看FTP的协议内容吧!