最近关注FTP程序源代码的朋友非常多,这里简单说明一下。
其实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./darwinsource/Current/lukemftpd-17/
FTP Client: http://www./darwinsource/Current/lukemftp-5/
当然,你也可以去看看OpenBSD提供的FTP server源代码:
/cgi-bin/cvsweb/src/libexec/ftpd/
或者你去看看有名的Berkeley上面的各种各样 FTP server的源代码吧:
/u/berkeley?q=ftp+server&sitesearch=berkeley.edu&domains=berkeley.edu
还上提供的各种ftp源代码:
在/search/index.php面页上第一栏"with all of the words"里填入ftp搜索吧,各种源代码都有,各种出名的FTP也都在上面了。
具体的源代码分析暂时我就不做了。
如果觉得《FTP服务器和客户端源代码编写问题(ftp server client source)》对你有帮助,请点赞、收藏,并留下你的观点哦!