【问题标题】:ftp server in CC语言的ftp服务器
【发布时间】:2012-06-28 11:41:16
【问题描述】:

我必须用 C 语言开发 1 个 FTP(简单)服务器。
简单是什么意思?? 我的意思是 FTP 服务器必须支持:

  1. 身份验证(USER、PASS、PORT)
  2. 更改目录 (CD)
  3. 文件列表 (LIST)
  4. 文件检索 (RETR)

我刚刚将数字 1-2-3-4 开发为“拆分部分”,我必须将它们合并到 main.c 中。所以他们没问题。
我不明白的是如何“接收”来自客户的通信。
我的意思是如何实现客户想要的(USER、PASS、CD、LIST、RETR)?
我已经阅读了 rfc959,但我还没有完全理解客户端和服务器之间的通信。
总结:

  1. 客户端连接到服务器(所以进入服务器这部分是套接字“accept(..)”),对吗? 1a 服务器向客户端发送“您已连接”对吗?
  2. 客户端向服务器发送用户、密码(文件 1,auth.c,但客户端向服务器发送用户和密码请求时我不知道如何读取)
  3. 成功登录后服务器发送文件列表(第3部分,list.c,没问题)
  4. 客户端向服务器发送它要下载的文件或 changedir 命令(同样,如何从客户端的请求中读取此信息?)

希望你明白:)

编辑:我在 GNU/Linux 上

【问题讨论】:

  • 我建议你从更简单的开始,通过阅读网络教程,直到你知道什么是套接字以及它们是如何工作的,你如何创建简单的客户端,简单的服务器,阻塞和非阻塞套接字的区别,服务器可以处理多个连接(基本上按照那个顺序)。然后你就可以开始考虑制作一个 FTP 服务器了。
  • 当然,除了以上网络相关的东西,你还需要对字符串和字符串解析、文件处理、列表等有一些基本的了解。
  • 我开发了一个小型客户端和服务器(也带有 fork),但它们的工作方式与 ftp 客户端和服务器不同。实际上我的程序使用是:1)客户端连接到服务器2)客户端发送“文件列表”3)服务器发送结果4)客户端发送文件名5)服务器发送文件......所以不像ftp xD那样正确跨度>
  • 在我看来,您的问题更多是关于如何解析客户端发送的命令,对吗?我认为您应该将这些过于笼统的问题拆分为更具体的问题,每个问题都描述您遇到的一个问题。
  • 阅读史蒂文斯关于网络编程的书籍,看在上帝的份上,避开 Beej 的指南,就像它是放射性的一样。

标签: c ftp


【解决方案1】:

虽然您的问题有点令人困惑,但我正在尝试回答。获取诸如“用户名密码”之类的命令行参数并将这些argv[] 通过send 传递给服务器,并在服务器端使用recv 接收。为了更好的理解,请参考链接Client.cpp

希望这能解决您的困惑。

【讨论】:

  • 如果对您有帮助,请记得点赞并接受解决方案 :-)
【解决方案2】:

如果您使用的是 Berkeley 套接字 API(您提到 accept() 意味着您是),您通常使用 @987654321@ 从套接字读取数据。您需要从客户端连接的套接字中读取数据,然后检查您所获得的内容以确定它是否是您可以处理的有效命令。

【讨论】:

  • 哦,对不起 :) 是的,我正在 GNU/Linux 上开发 :)
  • 但我无法理解的是“客户发送的内容”?它发送“USER username PASS pasw”或“Hello USER selected is username”或其他??
【解决方案3】:

我正在寻找一个代码来学习使用套接字的 ftp 的工作原理,并在 google 代码上找到了文件工作,并且代码清晰简单。 网址:http://code.google.com/p/ifilework

【讨论】: