什麼是因特網客戶端
因特網客戶端可以簡單的理解爲用來傳輸數據的地方,數據在服務提供者和服務使用者之間傳輸。在某些情況下稱爲‘’生產者 = 消費者“。服務器就是生產者,提供服務,而客戶端是使用服務,一般只有一個服務器(即進程 或主機等),但有多個消費者。
文件傳輸因特網協議
因特網最常見的事情就是傳輸文件,文件傳輸每時每刻都在發生。有很多協議可以用於因特網上傳輸文件。最流行的包括文件傳輸協議(FTP)、 UNIX 到 UNIX 複製協議 (UUCP)、用於 Web 的超文本傳輸協議(HTTP)。另外,還有(UNIX 下的)遠程文件複製 命令 rcp(以及更安全、更靈活的 scp 和 rsync)。
文件傳輸協議 – FTP
文件傳輸協議(File Transfer Protocol,FTP))由已故的 Jon Postel 和 Joyce Reynolds 開發,於1985年10月發佈,FTP主要用於匿名下載公共文件。也可以用於兩臺計算機之間傳輸文件,特別是在使用windows進行工作,而文件存儲系統使用UNIX的情況下,早在 Web 流行之前,FTP 就是在因特網上進行文件傳 輸以及下載軟件和源代碼的主要手段之一
FTP工作流程如下
- 客戶端連接遠程主機的TFP服務器。
- 客戶端輸入用戶賬號和密碼(或“anonymous”和電子郵件地址 )。
- 客戶端進行各種文件傳輸和信息查詢操作。
- 客戶端從遠程 FTP 服務器退出,結束傳輸。
Python 和 FTP
在使用 Python 的 FTP 支持時,所需要做的只是導入 ftplib 模塊,並實例化一個 ftplib.FTP 類對象。所有的 FTP 操作(如登錄、傳輸文件和註銷等)都要使用這個對象完成。 常用的FTP對象的類方法如下
交互式 FTP 示例
''''
代碼前幾行導入要用的模塊(主要用於抓取異常對象),並設置一些常量。
'''
import ftplib
import os
import socket
HOST = 'ftp.mozilla.org'
DIRN = 'pub/mozilla.org/webtools'
FILE = 'bugzilla-LATEST.tra.gz'
def main():
try:
f = ftplib.FTP(HOST) #:創建一個 FTP 對象,嘗試連接到 FTP 服務器
except (socket.error, socket.gaierror) as e:
print('ERROR: cannot reach "%s' % HOST)
return
print('*** Connected to host “%s”' % HOST)
try:
f.login() # 接着嘗試用“anonymous”登錄,
except ftplib.error_perm:
print('ERROR: cannot login anonmously')
f.quit()
return
print('*** Logged in as anonmously')
try:
f.cwd(DIRN) #就是轉到發佈目錄
except ftplib.error_perm:
print('ERROR: cannot CD to "%s"' %DIRN)
f.quit()
return
print('*** Changed to "%s"' % DIRN)
try:
f.retrbinary('RETR "%s"'% FILE,open(FILE,'wb').write) # 下載文件(
except ftplib.error_perm:
print('ERROR: cannot reas file "%s"' %FILE)
os.unlink()
return
else:
print('*** Downloaded "%s" to CWD' % FILE)
f.quit()
if __name__ == '__main__':
main()