当前位置: 技术问答>linux和unix
C++编写FTP客户端解析LIST命令获取目录不完整,求解。
来源: 互联网 发布时间:2016-12-22
本文导语: 背景: C++编写一FTP客户端,对FTP协议、文章等约了解一些。现在需要列出服务器某目录的文件(及目录),服务器已经完善,不需修改——准确说,服务器是一个硬盘,可以通过FTP访问、操作。 现在上传文件功能已经...
背景:
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的话,超时。
向各位大牛请教,如果可以完整接收服务器的文件列表?后期可能会有很多文件列表在同一个目录中,不过目前连几个文件名称都显示不完整。
或许我的思路出路,大家可以说说自己的思路;
或许是代码某些问题,我可以贴代码;
或许是其它问题。
在下向各位请教了。
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的话,超时。
向各位大牛请教,如果可以完整接收服务器的文件列表?后期可能会有很多文件列表在同一个目录中,不过目前连几个文件名称都显示不完整。
或许我的思路出路,大家可以说说自己的思路;
或许是代码某些问题,我可以贴代码;
或许是其它问题。
在下向各位请教了。
|
我来了
知道你已经解决了
纯粹帮你 把贴结了
知道你已经解决了
纯粹帮你 把贴结了
|
不懂,帮顶,接分,,,
|
不懂,帮顶,接分,,,
|
友情UP,呵呵
|
只会Java,只能帮你顶了
|
只会Java,只能帮你顶了.t
|
帮顶
|
|
单步的时候完整,直接跑不完整?
会不会是网络接收方面的问题,试试看直接跑的时候直接抓包,是不是有些包漏掉了。
呵呵
会不会是网络接收方面的问题,试试看直接跑的时候直接抓包,是不是有些包漏掉了。
呵呵
|
菜鸟来了
|
帮结贴 哈哈
|
|
路过,顶
|
哈哈 都来了啊
|
踩着楼主脚印过来的
|
纯属接分!!!!!!!!!!!
|
使用TCP模式?
send
recv
最好有回应模式
客户端,服务器。
while (1)
{
recv();
if (...)
{
send();
}
}
send
recv
最好有回应模式
客户端,服务器。
while (1)
{
recv();
if (...)
{
send();
}
}
|
呵呵,我是看了楼主的http://topic.csdn.net/u/20110815/16/57f9cd87-4651-42e0-a6fa-1535cb18af50.html
过来,瞅瞅的~
过来,瞅瞅的~
|
顶一下了,不知所云!
|
不懂C++
|
菜鸟路过,顶