FTP服务器和客户端源代码编写问题(ftp server client source)
生活随笔
收集整理的這篇文章主要介紹了
FTP服务器和客户端源代码编写问题(ftp server client source)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近關注FTP程序源代碼的朋友非常多,這里簡單說明一下。
其實FTP也就是普通的Socket程序,只是需要按照FTP協(xié)議(RFC959, 1635?可能我記錯了)去做,也就是每個消息有固定的結構的,比如頭3個字節(jié)必須是200,201,300,400之類的數字表示操作結果。
寫FTP協(xié)議的程序主要要明白的一個關鍵問題是雙socket,一個control socket,一個是data socket,當然,你讀源代碼還可能發(fā)現一個passive socket:
control socket是用來在Client和Server之間傳遞命令的(Client<->Server:21):比如Client向Server的21端口發(fā)一個USER命令,即發(fā)用戶名和密碼給Server,再比如Client發(fā)LIST命令給Server,都是要用control socket傳遞命令并接收命令操作結果的。
data socket是用來在Client和Server之間傳遞數據的(Client<->Server:20):比如Client發(fā)送一個LIST命令給Server之后,如果執(zhí)行成功,這個成功消息的返回要由上面的control socket返回給Client,但LIST得到的那些數據就要由data socket來傳遞,也只有在收到這個成功的消息之后,Client才會連接Server的20端口去接收數據。
另外有passive socket,是一種data socket,是反向連接的,即Server發(fā)了LIST命令操作成功的消息給Client之后,Client會告訴Server一個端口(比如3000),Server才會連接Client的3000端口,把LIST得到的數據發(fā)送給Client。
我發(fā)現了一些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也都在上面了。
具體的源代碼分析暫時我就不做了。
其實FTP也就是普通的Socket程序,只是需要按照FTP協(xié)議(RFC959, 1635?可能我記錯了)去做,也就是每個消息有固定的結構的,比如頭3個字節(jié)必須是200,201,300,400之類的數字表示操作結果。
寫FTP協(xié)議的程序主要要明白的一個關鍵問題是雙socket,一個control socket,一個是data socket,當然,你讀源代碼還可能發(fā)現一個passive socket:
control socket是用來在Client和Server之間傳遞命令的(Client<->Server:21):比如Client向Server的21端口發(fā)一個USER命令,即發(fā)用戶名和密碼給Server,再比如Client發(fā)LIST命令給Server,都是要用control socket傳遞命令并接收命令操作結果的。
data socket是用來在Client和Server之間傳遞數據的(Client<->Server:20):比如Client發(fā)送一個LIST命令給Server之后,如果執(zhí)行成功,這個成功消息的返回要由上面的control socket返回給Client,但LIST得到的那些數據就要由data socket來傳遞,也只有在收到這個成功的消息之后,Client才會連接Server的20端口去接收數據。
另外有passive socket,是一種data socket,是反向連接的,即Server發(fā)了LIST命令操作成功的消息給Client之后,Client會告訴Server一個端口(比如3000),Server才會連接Client的3000端口,把LIST得到的數據發(fā)送給Client。
我發(fā)現了一些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也都在上面了。
具體的源代碼分析暫時我就不做了。
總結
以上是生活随笔為你收集整理的FTP服务器和客户端源代码编写问题(ftp server client source)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基金净值是什么?买基金是选高净值还是低净
- 下一篇: ffmpeg 新老接口问题及对照集锦