编写一个ftp客户端程序来列出服务器上的文件的最佳方法?

我正在试图用C编写一个客户端服务器程序。 目标是从服务器接收目录列表。 现在我正试图开发客户端服务器,以便利用大部分资源。

实现的一种方法是服务器使单个send()调用发送单个文件的信息。 所以如果有100个文件,它会打100个电话。 但是我觉得它浪费了networking资源。 据我所知在Windows中的send()或recv()的缓冲区大小是8kb。 但单个文件的信息将不会是1kb。 那么有没有办法使send()调用发送多个文件信息(文件信息存储在结构中,所以他们基本上形成一个链表)? 可能是我可以在一个Send()调用中发送至less8个文件的信息。 这应该减less总的send()调用最多13。

所以基本上有一种方法通过发送链接列表()? 如果你能想出任何其他方法,请让我知道。

好问题! +1。

但是,你真的想要还是需要编写代码来使用Winsock? 有充足的理由这样做 – 包括这很有趣,也是一个挑战。 但是如果你不需要的话,你可能要考虑使用libcurl的ftp库 ,它是免费的,多平台的(当然包括win32),只是起作用,可能会让你的工作变得更容易。

我知道用FTP做这件事的唯一方法是使用多个连接到FTP服务器。 如果服务器允许这样做,则可以提高列表性能,因为列出完整文件夹树所需的许多协议交换可以并行运行。

Rgds,Martin

TCP是一个字节流。 无法保证您要发送的项目数量与要发送的呼叫数量send() (或recv() )之间存在1对1的关系。 这不仅仅是TCP的工作原理。 您按照需要的方式格式化数据,然后继续调用send()直到它告诉您所有数据都已发送完毕。

关于FTP,请阅读RFC 959和RFC 3659,以了解ftp协议如何实际工作。 在引入MLSTMLSD命令之前,目录列表没有标准格式。 FTP服务器可以自由使用他们想要的任何格式。 许多服务器只是通过操作系统自己的dirlist命令来传送原始数据。 例如, Indy在其FTP客户端中包含数十个解析器,用于处理非标准目录列表。