FTP服务器和客户端源代码编写问题(ftp server client source)

其实FTP也就是普通的Socket程序,只是需要按照FTP协议(RFC959, 1635?可能我记错了)去做,也就是每个消息有固定的结构的,比如头3个字节必须是200,201,300,400之类的数字表示操作结果。

写FTP协议的程序主要要明白的一个关键问题是双socket,一个control socket,一个是data socket,当然,你读源代码还可能发现一个passive socket:

control socket是用来在Client和Server之间传递命令的(Client<->Server:21):比如Client向Server的21端口发一个USER命令,即发用户名和密码给Server,再比如Client发LIST命令给Server,都是要用control socket传递命令并接收命令操作结果的。
data socket是用来在Client和Server之间传递数据的(Client<->Server:20):比如Client发送一个LIST命令给Server之后,如果执行成功,这个成功消息的返回要由上面的control socket返回给Client,但LIST得到的那些数据就要由data socket来传递,也只有在收到这个成功的消息之后,Client才会连接Server的20端口去接收数据。
另外有passive socket,是一种data socket,是反向连接的,即Server发了LIST命令操作成功的消息给Client之后,Client会告诉Server一个端口(比如3000),Server才会连接Client的3000端口,把LIST得到的数据发送给Client。

我发现了一些FTP的源代码,C的:
FTP Server:http://www.opensource.apple.com/darwinsource/Current/lukemftpd-17/
FTP Client:http://www.opensource.apple.com/darwinsource/Current/lukemftp-5/
当然,你也可以去看看OpenBSD提供的FTP server源代码:
http://www.openbsd.org/cgi-bin/cvsweb/src/libexec/ftpd/
或者你去看看有名的Berkeley上面的各种各样 FTP server的源代码吧:
http://www.googlesyndicatedsearch.com/u/berkeley?q=ftp+server&sitesearch=berkeley.edu&domains=berkeley.edu
还sf.net上提供的各种ftp源代码:
http://sourceforge.net/search/index.php面页上第一栏"with all of the words"里填入ftp搜索吧,各种源代码都有,各种出名的FTP也都在上面了。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自己写的ftp服务端程序代码,支持{"USER", do_user }, {"PASS", do_pass }, {"CWD", do_cwd }, {"XCWD", do_cwd }, {"CDUP", do_cdup }, {"REIN", do_rein },//重新初始化,此命令终止USER,重置所有参数,控制连接仍然打开,用户可以再次使用USER命令 {"QUIT", do_quit }, /*------------传输参数命令------------*/ {"PORT", do_port },//数据端口,主要向服务器发送客户数据连接的端口 //格式为PORT h1,h2,h3,h4,p1,p2,其中32位的IP地址用h1,h2,h3,h4表示,16位的TCP端口号用p1,p2表示 {"PASV", do_pasv },//此命令要求服务器数据传输进程在指定的数据端口侦听,进入被动接收请求的状态 {"TYPE", do_type },//文件类型,可指定ASCII码、EBCDIC码、Image、本地类型文件等参数 /*------------服务命令----------------*/ {"RETR", do_retr },//下载文件 {"STOR", do_stor },//上传 {"APPE", do_appe },//上传,如文件已存在,数据附加到尾部 {"REST", do_rest },//重新开始 {"RNFR", do_rnfr }, {"RNTO", do_rnto },//重命名文件或目录 {"ABOR", do_abor },//异常终止 {"DELE", do_dele },//删除文件 {"RMD", do_rmd },//删除目录 {"XRMD", do_rmd }, {"MKD", do_mkd },//新建目录 {"XMKD", do_mkd }, {"PWD", do_pwd },//打印当前目录 {"XPWD", do_pwd }, {"LIST", do_list },//列目录详细清单 {"NLST", do_nlst },//列目录短清单 {"SYST", do_syst },//获取系统信息 {"STAT", do_stat },//返回服务器状态 {"SIZE", do_size },//获得文件大小 {"HELP", do_help }, {"NOOP", do_noop }, {"SITE", do_site }, }等命令

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值