Python基礎(chǔ)篇(十)網(wǎng)絡(luò)編程

一、簡介

Python是一個很強(qiáng)大的網(wǎng)絡(luò)編程工具

(1)python內(nèi)有很多針對常見網(wǎng)絡(luò)協(xié)議的庫,對網(wǎng)絡(luò)協(xié)議的各個層次進(jìn)行了抽象封裝,因此使用python編寫程序不必關(guān)心網(wǎng)絡(luò)實(shí)現(xiàn)的細(xì)節(jié)

(2)python非常善于處理字節(jié)流的各種模式,使用python可以很容易地寫出處理各種協(xié)議格式的代碼

二、urllib和urllib2

互聯(lián)網(wǎng)基本原理是基于“請求-響應(yīng)”模式,獲取互聯(lián)網(wǎng)上的資源需要發(fā)出請求,即URL(地址)

Python中實(shí)現(xiàn)的urllib和urllib2,功能很強(qiáng)大,通過它們訪問網(wǎng)絡(luò)上的文件,就像訪問本地電腦的文件一樣,兩個模塊的功能都差不多,但urllib2更好一些。

①如果只需要簡單的下載,使用urllib就能夠滿足要求

②如果需要使用HTTP驗(yàn)證cookie或要為自己的協(xié)議編寫擴(kuò)展程序的話,urllib2是更好的選擇

(1)使用urllib.request模塊下載文件,使用urlretrieve()方法

語法:urlretrieve(url,[filename,reporthook])

參數(shù)url代表資源路徑

參數(shù)filename指定本地保存路徑

參數(shù)reporthook是一個回調(diào)函數(shù),當(dāng)連接上服務(wù)器、以及相應(yīng)的數(shù)據(jù)庫傳輸完畢時會觸發(fā)回調(diào),可以利用來顯示下載進(jìn)度

(2)使用urllib2可以像打開本地文件一樣打開遠(yuǎn)程文件,不同之處是只能使用只讀模式,打開遠(yuǎn)程文件使用的方法是urlopen(),傳遞給它的參數(shù)是URL

urlopen()返回一個能從中讀取數(shù)據(jù)的類文件對象,支持多種方法:read、readline、readlines、close

獲取到的信息結(jié)構(gòu)類似一個有兩層的字典,最外層只有一個鍵“weatherinfo”,它的值是另外一個字典,里面包含了很多天氣信息,這種數(shù)據(jù)結(jié)構(gòu)被稱為“json格式”

(3)Json

Json是一種輕量級的數(shù)據(jù)交換格式,是一種完全獨(dú)立于語言的文本格式,但是也使用了類似于C語言家族的習(xí)慣(包括C、C++、C#、Java、Python等),這些特性使json成為了理想的數(shù)據(jù)交換語言

Python標(biāo)準(zhǔn)庫中也包含了json模塊,模塊中的一些方法能幫助更好的處理這種json格式的數(shù)據(jù),例如通過loads方法就能將json數(shù)據(jù)轉(zhuǎn)換成真正的字典

三、socket

套接字(socket)是網(wǎng)絡(luò)編程中的一個基本組件,是兩個端點(diǎn)的程序之間的“信息通道”

套接字包括兩個:服務(wù)器套接字和客戶端套接字

無論是服務(wù)器還是客戶端,都首先需要調(diào)用socket模塊中的socket()方法來創(chuàng)建socket對象

(1)格式

socket()方法的格式:socket(family,type)

Family 參數(shù)代表地址家族,可以是AF_INET或AF_UNIX,AF_INET 代表IPv4地址,AF_UNIX只能用于單一的Unix系統(tǒng)進(jìn)程間通信

type參數(shù)代表套接字類型,可以是SOCK_STREAM或SOCK_DGRAM,SOCK_STREAM代表流套接字,應(yīng)用于TCP,SOCK_DGRAM代表數(shù)據(jù)報套接字,應(yīng)用于UDP

(2)流套接字和數(shù)據(jù)報套接字的區(qū)別

1、流套接字區(qū)分服務(wù)器和客戶端,數(shù)據(jù)報套接字不區(qū)分

2、流套接字適合傳輸數(shù)據(jù)量大的,數(shù)據(jù)報套接字適合傳輸數(shù)據(jù)量小的

3、客戶的流套接字單向傳遞,數(shù)據(jù)報套接字可以接收任何方向的數(shù)據(jù),并可以向任何地址發(fā)送數(shù)據(jù)報

4、流套接字使用時不需考慮底層細(xì)節(jié),依靠TCP協(xié)議進(jìn)行可靠的數(shù)據(jù)傳輸

?? 數(shù)據(jù)報套接字依靠UDP協(xié)議,數(shù)據(jù)傳輸效率高,但需要考慮底層細(xì)節(jié),在代碼中保證數(shù)據(jù)的可靠傳輸

5、流套接字依靠TCP協(xié)議建立好連接后發(fā)送數(shù)據(jù),不需要指定地址

?? 數(shù)據(jù)報套接字依靠UDP協(xié)議發(fā)送數(shù)據(jù),每次都需要指定發(fā)送給誰

四、服務(wù)器socket函數(shù)

bind(address)方法將套接字綁定到地址,參數(shù)address以元組(host,port)的形似表示地址

listen(backlog)方法開始監(jiān)聽TCP傳入連接,參數(shù)backlog為操作系統(tǒng)可以掛起的最大連接數(shù),至少為1-5

accept()方法接收TCP連接并返回元組(conn,address),conn是新的socket對象,服務(wù)器必須通過它與客戶通信,address是客戶的地址

編寫服務(wù)端socket思路:

1、創(chuàng)建套接字,綁定套接字到本地IP和端口

2、開始監(jiān)聽連接

3、進(jìn)入循環(huán),不斷接收客戶端的請求

4、接收傳來的數(shù)據(jù),并發(fā)送給對方數(shù)據(jù)

5、傳輸完畢后,關(guān)閉套接字

五、客戶端socket函數(shù)

connect(address)方法連接到指定地址的套接字,參數(shù)address格式為元組(host,port)地址

connect_ex(address)方法與connect()方法相同,但是成功返回0,失敗返回errno

編寫客戶端socket思路:

1、創(chuàng)建套接字,連接服務(wù)器地址

2、連接后發(fā)送和接收數(shù)據(jù)

3、傳輸完畢后,關(guān)閉套接字

六、公共socket函數(shù)

recv(bufsize)接收TCP數(shù)據(jù),參數(shù)bufsize指定接收的最大數(shù)據(jù)量,結(jié)果以字符串形式返回

send(string)發(fā)送TCP數(shù)據(jù),參數(shù)string是字符串,返回值是要發(fā)送的數(shù)據(jù)量

sendall(string)完整發(fā)送TCP數(shù)據(jù),在返回之前會嘗試發(fā)送所有數(shù)據(jù)

recvfrom(bufsize)接收UDP數(shù)據(jù),返回值是(data,address),address指明發(fā)送方地址

sendto(string,address)發(fā)送UDP數(shù)據(jù),參數(shù)中也需指明address(接收方地址)

settimeout(timeout)設(shè)置套接字操作的超時時間,參數(shù)timeout是浮點(diǎn)數(shù),單位為秒

close()關(guān)閉套接字

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文章首發(fā)于個人blog歡迎指正補(bǔ)充,可聯(lián)系lionsom_lin@qq.com原文地址:《網(wǎng)絡(luò)是怎樣連接的》閱讀整...
    Lucus_Linx閱讀 14,469評論 6 31
  • Socket創(chuàng)建函數(shù) socket.socket(socket_family, socket_type, prot...
    JianMing閱讀 6,096評論 1 13
  • 網(wǎng)絡(luò) 理論模型,分為七層物理層數(shù)據(jù)鏈路層傳輸層會話層表示層應(yīng)用層 實(shí)際應(yīng)用,分為四層鏈路層網(wǎng)絡(luò)層傳輸層應(yīng)用層 IP...
    FlyingLittlePG閱讀 968評論 0 0
  • 引言 網(wǎng)絡(luò)學(xué)習(xí)的核心內(nèi)容就是網(wǎng)絡(luò)協(xié)議的學(xué)習(xí) 網(wǎng)絡(luò)協(xié)議:網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)或者說是約定的集合因?yàn)椴?..
    _涼風(fēng)_閱讀 2,190評論 8 22
  • 1在微博上閑逛,看見一個作家的年終總結(jié),主要是寫看了多少書,電影,去哪旅行,干了些什么事,其中寫道這一年出了一本書...
    名字各種被占用閱讀 548評論 5 4

友情鏈接更多精彩內(nèi)容