python基礎教程總結13——網路編程,

來源:互聯網
上載者:User

標籤:

1.網路設計模組

1.1 socket模組

   根據串連啟動的方式以及本地通訊端要串連的目標,通訊端之間的串連過程可以分為三個步驟:伺服器監聽,用戶端請求,串連確認。  1)伺服器監聽:是伺服器端通訊端並不定位具體的用戶端通訊端,而是處於等待串連的狀態,即時監控網路狀態。  2)用戶端請求:是指由用戶端的通訊端提出串連請求,要串連的目標是伺服器端的通訊端。為此,用戶端的通訊端必須首先描述它要已連線的服務器的通訊端,指出伺服器端套    接字的地址和連接埠號碼,然後就向伺服器端通訊端提出串連請求。  3)串連確認:是指當伺服器端通訊端監聽到或者說接收到用戶端通訊端的串連請求,它就響應用戶端通訊端的請求,建立一個新的線程,把伺服器端通訊端的描述發給客戶     端,一旦用戶端確認了此描述,串連就建立好了。而伺服器端通訊端繼續處於監聽狀態,繼續接收其他用戶端通訊端的串連請求。  

  在網路編程中的一個基本組件就是通訊端(socket)。通訊端主要是兩個程式之間“資訊通道”。程式可能(通過網路連接)分布在不同的電腦上,通過通訊端相互發送資訊。在Python中的大多數的網路編程都隱藏了socket模組的基本細節,並且不直接和通訊端互動。

  通訊端包括兩個:伺服器通訊端和用戶端通訊端。建立一個伺服器通訊端後,讓它等待串連。這樣它就在某個網路地址處(ip地址和一個連接埠號碼的組合)監聽。處理用戶端通訊端通常比處理伺服器通訊端容易,因為伺服器必須準備隨時處理用戶端的串連,同時還要處理多個串連,而用戶端只是簡單的串連,完成事務,中斷連線。

  一個通訊端就是一個socket模組中的socket類的執行個體。有三個參數:

    第一個是地址族(預設是socket.AF_INET);

    第二個參數是流(預設是socket.SOCK_STREAM,預設值)或資料報(socket.SOCK_DGRAM)通訊端;

    第三個參數是使用的協議(預設是0,使用預設值即可)。對於一個普通的通訊端,不需要提供任何參數。

  伺服器端通訊端使用bind方法後,再調用listen方法監聽這個給定地址。用戶端通訊端使用connect方法串連到伺服器在connect方法中使用的地址與bind方法中的地址相同。在這種情況下,一個地址就是一個格式為(host,port)的元組,其中host是主機名稱,port是連接埠號碼。Listen方法只有一個參數,即伺服器未處理的串連的長度。

  伺服器通訊端開始監聽後,它就可以接受用戶端的串連。這個步驟使用accept方法來完成。這個方法會堵塞(等待)直到用戶端串連,然後該方法就返回一個格式為(client,address)的元組。伺服器能處理用戶端到它滿意的程度,然後調用一個accept方法開始等待下一個串連。這個過程通常都是在一個無限迴圈中實現的。

  通訊端有兩個方法:send和rev,用於傳輸資料。可以使用字串參數調用send以發送資料,用一個所需的(最大)位元組數做參數調用recv來接收資料。如果不能確定使用哪個數字比較好,那麼1024是個很好的選擇。

 1 #小型伺服器 2 import socket 3 s=socket.socket() 4 host=socket.gethostname() 5 port=1234 6 s.bind((host,port)) 7 s.listen(5) 8 while True: 9     c,addr = s.accept()10     print "Got connect from",addr11     c.send(‘tkx for connecting‘)12     c.close()13 14 15 #小型用戶端16 17 import socket18 s=socket.socket()19 host=socket.gethostname()20 port=123421 s.connect((host,port))22 print s.recv(1024)

 

1.2 urllib和urllib2模組

  在能使用的各種網路工作庫中,功能最強大的是urllib和urllib2。它們能讓通過網路訪問檔案,就像那些檔案存在於你電腦上一樣。通過一個簡單的函數調用,幾乎可以把任何URL所指向的東西用作程式的輸入。這兩個模組功能差不多,但urllib更好一些。如果只使用簡單的下載,urllib就足夠了。但如果需要使用HTTP驗證或cookie或者要為自己的協議寫擴充程式的話,urllib2是個好的選擇。

1)開啟遠程檔案

#開啟遠程檔案>>> from urllib import urlopen>>> webpage=urlopen("http://blog.csdn.net/signjing")

  Urlopen返回的類檔案對象支援close、read、readline和readlines方法,當然也支援迭代。

2)擷取遠程檔案

  函數urlopen提供一個能從中讀取資料的類檔案對象。如果希望urllib為你下載檔案並在本地檔案存在一個檔案的副本,那麼可以使用urlretrieve。

Urlretrieve返回一個元組(filename,headers)而不是類檔案對象,filename是本地檔案的名字(由urllib自動建立),headers包含一些遠程檔案的資訊。

>>> import urllib>>> urllib.urlretrieve(‘http://www.baidu.com‘,‘d:\\baidu.html‘)(‘d:\\baidu.html‘, <httplib.HTTPMessage instance at 0x02BFC788>)

  如果沒有指定檔案名稱,檔案會放在臨時的位置,用open函數可以開啟它。完成了對它的操作,就可以刪除它以節省空間的,要刪除臨時檔案,可以用urlcleanup函數,不需要提供參數。

 

1.3 其他模組

模組

描述

asynchat

asyncore的增強版本

asyncore

非同步通訊端處理常式

cgi

基本的CGI支援

Cookie

Cookie對象操作,主要用於伺服器

cookielib

用戶端cookie支援

email

Email訊息支援

ftplib

FTP用戶端模組

gopherlib

gopher用戶端模組

httplib

http用戶端模組

imaplib

imap4用戶端模組

mailbox

讀取幾種郵箱的格式

mailcap

通過mailcap檔案訪問MIME配置

mhlib

訪問MH郵箱

nntplib

NNTP用戶端模組

poplib

pop用戶端模組

robotparser

支援解析web伺服器的robot檔案

SimpleXMLRPCServer

一個簡單的xml-rpc伺服器

smtpd

smtp伺服器端模組

smtplib

smtp用戶端模組

telnetlib

telnet用戶端模組

urlparse

支援解釋url

xmlrpclib

xml-rpc的用戶端支援

 

 

2. SocketServer

  SocketServer模組是標準庫中很多伺服器架構的基礎。SocketServer包含了4個基本的類:針對TCP通訊端流的TCPServer;針對UDP資料通訊端的UDPServer;以及針對性不強的UnixStreamServer和UnixDatagramServer。

 

3. 多串連

  到目前為止討論的伺服器解決方案都是同步的:即一次只能串連一個用戶端並處理它的請求。怎麼樣同時處理多個串連呢?

  三種方法:分叉(forking)、線程(threading)以及非同步I/O(asynchronous I/O)。

 

4. Twisted

  Twisted是一個事件驅動的python網路架構,原來是為網路遊戲開發的,現在被所有類型的網路軟體使用。

 

python基礎教程總結13——網路編程,

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.