44 網路客戶端程式設計

2022-05-30 21:54:13 字數 4856 閱讀 7230

一、什麼是網際網路客戶端

這裡,我們將詳細了解三個網際網路協議——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 ftp

f = 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 python

fromftplib 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 python

from

ftplib import ftp

class downloadfile(object

): def __init__(self, ftpst):

self.ftpsite =ftpst

def getfile(self):

f =ftp(self.ftpsite)

f.login(

'ftp

', '

[email protected]')

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...