自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

FileZilla 源代碼分析9

系統(tǒng) Linux
FileZilla是一個(gè)免費(fèi)開源的FTP客戶端軟件,分為客戶端版本和服務(wù)器版本,具備所有的FTP軟件功能??煽匦?、有條理的界面和管理多站點(diǎn)的簡化方式使得Filezilla客戶端版成為一個(gè)方便高效的FTP客戶端工具,而FileZilla Server則是一個(gè)小巧并且可靠的支持FTP&SFTP的FTP服務(wù)器軟件。

FileZilla是一種快速、可信賴的FTP客戶端以及服務(wù)器端開放源代碼程式,具有多種特色、直覺的接口。本文就給大家分析下FileZilla的源代碼。

  在進(jìn)一步分析代碼之前,先復(fù)習(xí)一下FTP協(xié)議,下圖是FTP的結(jié)構(gòu)圖。

圖1

 

  客戶端和服務(wù)器是通過兩個(gè)連接來進(jìn)行通訊的:

  一個(gè)是控制連接,也就是傳輸些控制命令,客戶端發(fā)出FTP命令,服務(wù)器給出應(yīng)答,例如:USER,PASS命令等等。這個(gè)連接中,F(xiàn)TP服務(wù)器的端 口就是熟知的21端口,連接是由客戶端發(fā)起的,例如:ftp 192.168.0.1。有一點(diǎn)注意,用戶是通過“用戶接口”來操作的,一般的用戶接口是指cuteFTP這些FTP客戶端,或者ftp.exe這種命令 行程序,用戶在用戶接口使用的是ftp命令,如ls, get, cd等,這些ftp命令并不是真正與FTP服務(wù)器交互的命令,這些ftp命令還需要由“用戶協(xié)議解釋器”翻譯成真正的ftp協(xié)議命令,如USER, PASS,才能與服務(wù)器進(jìn)行交互。

  一個(gè)是數(shù)據(jù)連接,即真正的文件傳輸是在這個(gè)連接上進(jìn)行的。服務(wù)器端的數(shù)據(jù)連接端口是20,客戶端的數(shù)據(jù)連接端口是隨機(jī)生成的。數(shù)據(jù)連接只在傳輸文件 時(shí)存在,文件傳完后,這個(gè)連接就斷了,如果需要再次傳送文件,會(huì)再次建立一個(gè)數(shù)據(jù)連接(客戶端的端口是隨機(jī)的,不一定是上次的那個(gè))。數(shù)據(jù)連接的模式有兩 種,一種是主動(dòng)方式,一種是被動(dòng)方式,兩者的區(qū)別在于數(shù)據(jù)連接是由誰發(fā)起。

  我們來看一個(gè)典型的FTP交互過程,用的是windows的ftp.exe程序,先建立一個(gè)連接,然后ls看一下文件列表,用get命令下 載一個(gè)文件,***quit關(guān)閉。下面-d選項(xiàng)可以顯示交互的細(xì)節(jié),注意-->開頭的行是ftp客戶端發(fā)給FTP服務(wù)器的請(qǐng)求,3個(gè)數(shù)字開頭的行是服 務(wù)器的應(yīng)答,如220, 331等開頭的行:

  C:\>ftp -d localhost

  Connected to dell.

  220-FileZilla Server version 0.9.18 beta

  220-written by Tim Kosse (Tim.Kosse@gmx.de)

  220 Please visit http://sourceforge.net/projects/filezilla/

  User (dell:(none)): robert

  ---> USER robert

  331 Password required for robert

  Password:

  ---> PASS test

  230 Logged on

  ftp> ls

  ---> PORT 127,0,0,1,4,173

  200 Port command successful

  ---> NLST

  150 Opening data channel for directory list.

  Manual.txt

  226 Transfer OK

  ftp: 收到 175 字節(jié),用時(shí) 0.00Seconds 175000.00Kbytes/sec.

  ftp> get Manual.txt

  ---> PORT 127,0,0,1,4,174

  200 Port command successful

  ---> RETR Manual.txt

  150 Opening data channel for file transfer.

  226 Transfer OK

  ftp: 收到 17319 字節(jié),用時(shí) 0.09Seconds 192.43Kbytes/sec.

  ftp> quit

  ---> QUIT

  221 Goodbye

  C:\>

  剛開始,客戶端發(fā)出建立連接的請(qǐng)求:

  C:\>ftp -d localhost // 建立連接

  Connected to dell. // 連接已建立

  然后服務(wù)器發(fā)送歡迎信息,并要求輸入用戶名:

  220-FileZilla Server version 0.9.18 beta

  220-written by Tim Kosse (Tim.Kosse@gmx.de)

  220 Please visit http://sourceforge.net/projects/filezilla/

  User (dell:(none)):

  客戶端輸入用戶名robert,然后回車:

  ---> USER robert // ftp.exe生成FTP命令:USER,發(fā)送給服務(wù)器

  服務(wù)器要求輸入密碼:

  331 Password required for robert

  Password:

  客戶端輸入密碼,然后回車:

  ---> PASS test // ftp.exe生成FTP命令:PASS,發(fā)送給服務(wù)器

  服務(wù)器通過密碼驗(yàn)證:

  230 Logged on

  客戶端鍵入ls命令

  ftp> ls

  ftp.exe生成FTP命令:PORT,告訴服務(wù)器客戶端的隨機(jī)端口是什么

  ---> PORT 127,0,0,1,4,173 // 127,0,0,1是IP地址,4 * 256 + 173 = 1197是隨機(jī)端口號(hào)

  200 Port command successful // 服務(wù)器響應(yīng)PORT命令

  ---> NLST // 客戶端發(fā)出NLST命令,要求列出文件列表

  150 Opening data channel for directory list. // 服務(wù)器會(huì)在20端口與客戶端的1197端口建立數(shù)據(jù)連接,傳輸數(shù)據(jù),注意ls命令的結(jié)果是在“數(shù)據(jù)連接”中傳輸?shù)?/p>

  Manual.txt // 只有一個(gè)文件

  226 Transfer OK // FTP服務(wù)器響應(yīng),傳輸完畢

  ftp: 收到 175 字節(jié),用時(shí) 0.00Seconds 175000.00Kbytes/sec. // FTP客戶端顯示的傳輸結(jié)果

  下面客戶端要求下載Manual.txt文件

  ftp> get Manual.txt

  ---> PORT 127,0,0,1,4,174 // 告訴服務(wù)器客戶端新的隨機(jī)端口4 * 256 + 174 = 1198

  200 Port command successful // // 服務(wù)器響應(yīng)PORT命令

  ---> RETR Manual.txt // 告訴服務(wù)器下載Manual.txt文件

  150 Opening data channel for file transfer. // 服務(wù)器會(huì)在20端口與客戶端的1198端口建立數(shù)據(jù)連接,傳輸數(shù)據(jù)

  226 Transfer OK // FTP服務(wù)器響應(yīng),傳輸完畢

  ftp: 收到 17319 字節(jié),用時(shí) 0.09Seconds 192.43Kbytes/sec. // FTP客戶端顯示的傳輸結(jié)果

  ***客戶端退出

  ftp> quit

  ---> QUIT // 發(fā)出QUIT命令

  221 Goodbye // 服務(wù)器***響應(yīng)

  仔細(xì)閱讀上面的交互過程,可以發(fā)現(xiàn),用戶手工輸入的一個(gè)FTP命令,可能會(huì)被ftp.exe處理成與FTP服務(wù)器的多次交互。如ls, get命令。

  要想詳細(xì)了解FTP命令的細(xì)節(jié),可以參見FTP的RFC,或者相關(guān)的資料,不過由于我們閱讀源代碼的主要目的不是研究FTP細(xì)節(jié),而在于掌握高并發(fā)的網(wǎng)絡(luò)編程的技術(shù),所以,我們只以上面這個(gè)簡單的FTP交互來看一下,在代碼中這個(gè)過程是如何實(shí)現(xiàn)的

通過文章完整的描述,大家應(yīng)該知道了FileZilla 源代碼,希望對(duì)大家有幫助!

【編輯推薦】

  1. FileZilla簡單介紹
  2. FileZilla 源代碼分析1
  3. FileZilla 源代碼分析2
  4. FileZilla 源代碼分析3
  5. FileZilla 源代碼分析4
  6. FileZilla 源代碼分析5
  7. FileZilla 源代碼分析6
  8. FileZilla 源代碼分析7
  9. FileZilla 源代碼分析8

 

責(zé)任編輯:趙鵬 來源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2011-02-23 14:26:28

FileZilla

2011-02-23 15:33:42

FileZilla

2011-02-23 13:47:33

FileZilla

2011-02-23 15:11:27

FileZilla

2011-02-23 15:21:06

FileZilla

2011-02-23 14:54:58

FileZilla

2011-02-23 14:46:21

FileZilla

2011-02-23 14:39:27

FileZilla

2011-02-23 14:16:43

FileZilla

2011-03-01 16:25:37

FileZilla

2011-03-01 16:32:58

FileZilla

2011-03-01 16:01:08

FileZilla

2011-03-01 16:19:27

FileZilla

2015-08-28 09:38:51

Linux源代碼分析工具

2018-05-25 14:16:55

NFS源代碼線程

2015-08-26 17:38:47

Linux源代碼

2009-07-02 13:59:35

JSP后臺(tái)

2011-08-24 15:42:38

LUA源代碼

2019-03-10 22:45:42

代碼開發(fā)內(nèi)核

2020-02-24 09:25:33

代碼開發(fā)工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)