一、什麼是網際網路客戶端
這裡,我們將詳細了解三個網際網路協議——ftp, nntp 和 pop3,並寫出它們的客戶端程式
二、檔案傳輸
2.1 檔案傳輸網際網路協議
1、網際網路中最流行的事情就是檔案的交換,檔案交換無處不在
2、有很多協議可以供網際網路上傳輸檔案使用
3、最流行的有檔案傳輸協議(ftp),unix-to-unix 複製協議(uucp),以及網頁的超文字傳輸協議(http)
4、另外, 還有 (unix 下的) 遠端檔案複製指令 rcp (以及更安全, 更靈活的 scp 和 rsync)
2.2 檔案傳輸協議(ftp)
1、ftp 要求輸入使用者名稱和密碼才能訪問遠端的 ftp 伺服器, 但它也允許沒有帳號的使用者以匿名使用者登入。不過,管理員要先設定 ftp 伺服器允許匿名使用者登入
2、在底層上,ftp 只使用 tcp
3、ftp的客戶端和伺服器都使用兩個套接字來通訊:乙個是控制和命令埠(21 號埠),另乙個是資料埠(有時是 20 號埠)
4、客戶端和伺服器使用指令和控制埠傳送 ftp 協議,而資料通過資料埠傳輸。
其工作流程如下:
1.客戶端連線遠端的 ftp 伺服器
2. 客戶端輸入使用者名稱和密碼(或「anonymous」和 e-mail 位址)
3. 客戶端做各種檔案傳輸和資訊查詢操作
4. 客戶端登出遠端 ftp 伺服器,結束通訊
ftp 有兩種模式:主動和被動
1、只有在主動模式伺服器才使用資料埠
2、在伺服器把 20 號埠設定為資料埠後,它「主動」連線客戶端的資料埠
3、而被動模式中,伺服器只是告訴客戶端它的隨機埠的號碼,客戶端必須主動建立資料連線。在這種模式下,你會看到,
ftp 伺服器在建立資料連線時是「被動」的
2.3 python 和 ftp
1、在使用 python 的 ftp 支援時,你所需要做的就是匯入 ftplib 模組,並例項化乙個 ftplib.ftp類物件。 所有的 ftp 操作 (如登入, 傳輸檔案和登出等)都要使用這個物件來完成 ,例如:
fromftplib import ftpf = ftp('ftp.python.org')
f.login('anonymous', '[email protected]')
:f.quit()
2.4 ftplib.ftp 類方法
ftp 物件的最常用方法
login(user='anonymous',passwd='', acct='') :登入到 ftp 伺服器,所有的引數都是可選的pwd() :得到當前工作目錄
cwd(path) :把當前工作目錄設定為 path
dir([path[,...[,cb]]) :顯示 path 目錄裡的內容,可選的引數 cb 是乙個**函式,它會被傳給 retrlines()方法
nlst([path[,...]) :與 dir()類似,但返回乙個檔名的列表,而不是顯示這些檔名
storlines(cmd, f): 給定 ftp 命令(如「stor filename」),以上傳文字檔案。要給定乙個檔案物件 f
storbinary(cmd, f[,bs=8192]) :與 storlines()類似,只是這個指令處理二進位制檔案。
要給定乙個檔案物件 f,上傳塊大小 bs 預設為 8kbs=8192])
rename(old, new) :把遠端檔案 old 改名為 newdelete(path) :刪除位於 path 的遠端檔案
mkd(directory) :建立遠端目錄
rmd(directory): 刪除遠端目錄
quit() :關閉連線並退出
二、高階功能模組
啟動狀態下:
service vsftpd start>>>import ftplib
>>>ftplib.__file__
>>> ftp = ftplib.ftp('
localhost')
>>>ftp.getwelcome()
'220 (vsftpd 2.2.2)
'>>> ftp.login('
ftp')'
230 login successful.
>>>ftp.pwd()'/
'>>>ftp.dir()
drwxr-xr-x 200
4096 mar 02
2012 pub
關閉狀態下:
service vsftpd stop>>> ftp = ftplib.ftp('
localhost
') #這時會報socke.error錯誤。
>>> ftp = ftplib.ftp('
localhosts
') #這時會報socket.gaierror
版本1:
#!/usr/bin/env pythonfromftplib import ftp
import sys
import socket
def getfile():
try:
f = ftp('localhost')
except (socket.gaierror, socket.error), e:
print 'connection error:', e
sys.exit(1)
f.login('ftp', '[email protected]')
f.cwd('pub')
f.dir()
fname = raw_input('download file: ')
f.retrbinary('retr %s' % fname, open(fname, 'w').write)
f.quit()
def main():
getfile()
if __name__ == '__main__':
main()
版本2:
[root@svr5 py]# cat ftpcl.py
#!/usr/bin/env python#coding:utf8
import ftplib
import sys
import socket
def getfile():
try:
f = ftplib.ftp('localhost')
except (socket.gaierror, socket.error), e:
print 'error:', e
sys.exit(1)
f.login('ftp')
print f.getwelcome()
f.cwd('pub')
print 'change dir:',f.pwd()
print 'file list:'f.dir()
f.retrbinary('retr %s' % fname, open(fname, 'w').write)
f.quit()
def main():
getfile()
if __name__ == '__main__':
main()
執行結果:
[root@svr5 py]#[root@svr5 py]# ./ftpcl.py
220 (vsftpd 2.2.2)
change dir: /pub
file list:
-rw-r--r-- 1 0 0 0 dec 02 14:04a.txt
download file: a.txt
[root@svr5 py]# ls
a.txt counter.py ftpcl.py info.py mathgame.py passwd
balance.txt finance.py hotel.py initm.py mypack record.txt
版本1:
#!/usr/bin/env pythonfrom
ftplib import ftp
class downloadfile(object
): def __init__(self, ftpst):
self.ftpsite =ftpst
def getfile(self):
f =ftp(self.ftpsite)
f.login(
'ftp
', '
f.dir()
chdir = raw_input('
enter dir: ')
f.cwd(chdir)
f.dir()
fname = raw_input('
download file: ')
f.retrbinary(
'retr %s
' % fname, open(fname, 'w'
).write)
f.quit()
def main():
ftpsite = raw_input('
ftp site: ')
myftp =downloadfile(ftpsite)
myftp.getfile()
if __name__ == '
__main__':
main()
QT5網路程式設計筆記 單客戶端與多客戶端
qhostinfo類作用,獲取主機名,也可以通過主機名來查詢ip位址,或者通過ip位址來反向查詢主機名。qstring localhostname qhostinfo localhostname 獲取計算機名稱 qdebug localhostname qhostinfo info qhostinf...
《Python網路基礎》學習筆記(二) 網路客戶端
python通過socket模組提供了訪問作業系統socket庫的介面,建立socket的時候,只需要呼叫這個模組裡的函式和常量。建立socket 對於乙個客戶端程式,建立乙個socket需要經過兩個步驟 1.建立乙個實際的socket物件。2.將它連線到遠端伺服器上。在建立socket物件的時候,...
Python網路程式設計客戶端
程式設計流程 1 建立套接字 2 建立連線 3 傳送資料 資料要用二進位制個數編碼 4 接收資料,並設定資料流大小 import socket clientsocket socket.socket socket.af inet,socket.sock stream 建立連線 伺服器的位址和埠 hos...