- 论坛徽章:
- 1
|
原帖由 flw 于 2007-11-2 12:00 发表 ![]()
呵呵,我现在就在写一个你所说的“烂客户端”,看来我们俩是死对头。
我这个客户端要求服务器支持多线程上传同一个文件,你的服务器支持吗?
我现在测试过 vsftpd pureftpd proftpd,都不支持,只有 wu-ftpd ...
多线程下载可以,上传不行,文件会乱掉
我的接收文件算法是这样实现的
在数据连接正确建立之后
首先生成带绝对路径的真正文件名
在一个所有用户都不可见的临时目录里,用线程id为临时文件名
接收数据
当数据接受完毕之后
用rename()将这个临时文件改名为真正的文件名
如果上传之前客户用了REST
那么会将目的文件rename()为临时文件
fseek(fp, REST值,SEEK_SET)
传输完成后再rename()回去
如果要支持多线程上传
临时文件就要带上REST信息和实际传输长度
并且需要编写一个函数把这若干个碎片文件合并
由于标准FTP协议不能预先知道文件大小,这个合并程序要考虑很多异常才行
我打算将来实现这个多线程上传支持
不过最近在赶时间
至于传输过程正在写入的文件对用户不可见,是应用的要求,这个不能修改 |
|