成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

FileZilla 源代碼分析9

系統 Linux
FileZilla是一個免費開源的FTP客戶端軟件,分為客戶端版本和服務器版本,具備所有的FTP軟件功能。可控性、有條理的界面和管理多站點的簡化方式使得Filezilla客戶端版成為一個方便高效的FTP客戶端工具,而FileZilla Server則是一個小巧并且可靠的支持FTP&SFTP的FTP服務器軟件。

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

  在進一步分析代碼之前,先復習一下FTP協議,下圖是FTP的結構圖。

圖1

 

  客戶端和服務器是通過兩個連接來進行通訊的:

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

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

  我們來看一個典型的FTP交互過程,用的是windows的ftp.exe程序,先建立一個連接,然后ls看一下文件列表,用get命令下 載一個文件,***quit關閉。下面-d選項可以顯示交互的細節,注意-->開頭的行是ftp客戶端發給FTP服務器的請求,3個數字開頭的行是服 務器的應答,如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 字節,用時 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 字節,用時 0.09Seconds 192.43Kbytes/sec.

  ftp> quit

  ---> QUIT

  221 Goodbye

  C:\>

  剛開始,客戶端發出建立連接的請求:

  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 // ftp.exe生成FTP命令:USER,發送給服務器

  服務器要求輸入密碼:

  331 Password required for robert

  Password:

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

  ---> PASS test // ftp.exe生成FTP命令:PASS,發送給服務器

  服務器通過密碼驗證:

  230 Logged on

  客戶端鍵入ls命令

  ftp> ls

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

  ---> PORT 127,0,0,1,4,173 // 127,0,0,1是IP地址,4 * 256 + 173 = 1197是隨機端口號

  200 Port command successful // 服務器響應PORT命令

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

  150 Opening data channel for directory list. // 服務器會在20端口與客戶端的1197端口建立數據連接,傳輸數據,注意ls命令的結果是在“數據連接”中傳輸的

  Manual.txt // 只有一個文件

  226 Transfer OK // FTP服務器響應,傳輸完畢

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

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

  ftp> get Manual.txt

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

  200 Port command successful // // 服務器響應PORT命令

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

  150 Opening data channel for file transfer. // 服務器會在20端口與客戶端的1198端口建立數據連接,傳輸數據

  226 Transfer OK // FTP服務器響應,傳輸完畢

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

  ***客戶端退出

  ftp> quit

  ---> QUIT // 發出QUIT命令

  221 Goodbye // 服務器***響應

  仔細閱讀上面的交互過程,可以發現,用戶手工輸入的一個FTP命令,可能會被ftp.exe處理成與FTP服務器的多次交互。如ls, get命令。

  要想詳細了解FTP命令的細節,可以參見FTP的RFC,或者相關的資料,不過由于我們閱讀源代碼的主要目的不是研究FTP細節,而在于掌握高并發的網絡編程的技術,所以,我們只以上面這個簡單的FTP交互來看一下,在代碼中這個過程是如何實現的

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

【編輯推薦】

  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

 

責任編輯:趙鵬 來源: 網絡轉載
相關推薦

2011-02-23 15:33:42

FileZilla

2011-02-23 14:26:28

FileZilla

2011-02-23 13:47:33

FileZilla

2011-02-23 15:21:06

FileZilla

2011-02-23 15:11:27

FileZilla

2011-02-23 14:46:21

FileZilla

2011-02-23 14:54:58

FileZilla

2011-02-23 14:16:43

FileZilla

2011-02-23 14:39:27

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源代碼線程

2009-07-02 13:59:35

JSP后臺

2015-08-26 17:38:47

Linux源代碼

2011-08-24 15:42:38

LUA源代碼

2019-03-10 22:45:42

代碼開發內核

2020-02-24 09:25:33

代碼開發工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色先锋影音| 欧美亚洲视频在线观看 | 亚洲aⅴ一区二区 | 日韩av在线中文字幕 | 免费精品在线视频 | 免费观看成人av | 中文字幕乱码一区二区三区 | 在线色| 黑人性hd | 欧美一区中文字幕 | 久久www免费人成看片高清 | 97人人爱 | 欧美网址在线观看 | 国产乱码精品一区二区三区五月婷 | av天天干 | 国产乱码精品一区二区三区中文 | 日韩亚洲视频 | 欧美成人第一页 | 天天干成人网 | 草久久久 | 日本粉嫩一区二区三区视频 | 青青草av在线播放 | 精品粉嫩超白一线天av | 亚洲看片网站 | 成人午夜免费在线视频 | 久草视频在线播放 | 国产在线视频一区二区 | 美女视频一区二区三区 | 色天堂视频 | 男人的天堂avav | 久久久在线视频 | 亚洲精品久久久久久一区二区 | 国产亚洲欧美在线视频 | 成人久草| 欧美视频免费在线 | 亚洲日本欧美日韩高观看 | 国产日韩精品在线 | av黄色免费在线观看 | 国产精品久久久久久av公交车 | 美女视频网站久久 | 欧美一区二区三区四区五区无卡码 |