C++编写FTP客户端解析LIST命令获取目录不完整,求解。
李迟 博客专家认证 2011-08-01 04:26:22 背景:
C++编写一FTP客户端,对FTP协议、文章等约了解一些。现在需要列出服务器某目录的文件(及目录),服务器已经完善,不需修改——准确说,服务器是一个硬盘,可以通过FTP访问、操作。
现在上传文件功能已经完成,但列表功能一直出现问题。
LIST命令通:
发送LIST命令(有回应信息)->创建、连接数据连接通路(其中也包括PASV命令),读取该通路上的数据(得到的即目录、文件名称),关闭->回应信息。
示例:
227 Entering Passive Mode (172,18,222,100,16,171).
150 Opening ASCII mode data connection for file list
此处为文件名称
226 Transfer complete.
但是,接收的数据不完整(有时完整)。目前目录文件不多,开辟空间为2048,暂时足够。单步调试时,发现该缓冲区中有完整数据,也能正常输出。但直接运行程序的话,接收不完整。
另外,关闭LIST数据连接后,再次接收命令回应信息(即上面出现的226 Transfer complete.之类的),出现阻塞,用select的话,超时。
向各位大牛请教,如果可以完整接收服务器的文件列表?后期可能会有很多文件列表在同一个目录中,不过目前连几个文件名称都显示不完整。
或许我的思路出路,大家可以说说自己的思路;
或许是代码某些问题,我可以贴代码;
或许是其它问题。
在下向各位请教了。
PS:我经常在Linux那边混的,这个版块才2条裤衩,能力有限,各位不要见怪。