Python 網路編程

來源:互聯網
上載者:User

標籤:接收   str   ret   content   code   接受   title   xmlrpc   綁定   

Python 網路編程

Python 提供了兩個層級訪問的網路服務。:

  • 低層級的網路服務支援基本的 Socket,它提供了標準的 BSD Sockets API,可以訪問底層作業系統Socket介面的全部方法。
  • 進階別的網路服務模組 SocketServer, 它提供了伺服器中心類,可以簡化網路伺服器的開發。
什麼是 Socket?

Socket又稱"通訊端",應用程式通常通過"通訊端"向網路發出請求或者應答網路請求,使主機間或者一台電腦上的進程間可以通訊。

socket()函數

Python 中,我們用 socket()函數來建立通訊端,文法格式如下:

socket.socket([family[, type[, proto]]])
參數
  • family: 通訊端家族可以使AF_UNIX或者AF_INET
  • type: 通訊端類型可以根據是連線導向的還是非串連分為SOCK_STREAMSOCK_DGRAM
  • protocol: 一般不填預設為0.
Socket 對象(內建)方法
函數 描述
伺服器端通訊端
s.bind() 綁定地址(host,port)到通訊端, 在AF_INET下,以元組(host,port)的形式表示地址。
s.listen() 開始TCP監聽。backlog指定在拒絕串連之前,作業系統可以掛起的最大串連數量。該值至少為1,大部分應用程式設為5就可以了。
s.accept() 被動接受TCP用戶端串連,(阻塞式)等待串連的到來
用戶端通訊端
s.connect() 主動初始化TCP伺服器串連,。一般address的格式為元組(hostname,port),如果串連出錯,返回socket.error錯誤。
s.connect_ex() connect()函數的擴充版本,出錯時返回出錯碼,而不是拋出異常
公用用途的通訊端函數
s.recv() 接收TCP資料,資料以字串形式返回,bufsize指定要接收的最大資料量。flag提供有關訊息的其他資訊,通常可以忽略。
s.send() 發送TCP資料,將string中的資料發送到串連的通訊端。傳回值是要發送的位元組數量,該數量可能小於string的位元組大小。
s.sendall() 完整發送TCP資料,完整發送TCP資料。將string中的資料發送到串連的通訊端,但在返回之前會嘗試發送所有資料。成功返回None,失敗則拋出異常。
s.recvfrom() 接收UDP資料,與recv()類似,但傳回值是(data,address)。其中data是包含接收資料的字串,address是發送資料的通訊端地址。
s.sendto() 發送UDP資料,將資料發送到通訊端,address是形式為(ipaddr,port)的元組,指定遠程地址。傳回值是發送的位元組數。
s.close() 關閉通訊端
s.getpeername() 返回串連通訊端的遠程地址。傳回值通常是元組(ipaddr,port)。
s.getsockname() 返回通訊端自己的地址。通常是一個元組(ipaddr,port)
s.setsockopt(level,optname,value) 設定給定通訊端選項的值。
s.getsockopt(level,optname[.buflen]) 返回通訊端選項的值。
s.settimeout(timeout) 設定通訊端操作的逾時期,timeout是一個浮點數,單位是秒。值為None表示沒有逾時期。一般,逾時期應該在剛建立通訊端時設定,因為它們可能用於串連的操作(如connect())
s.gettimeout() 返回當前逾時期的值,單位是秒,如果沒有設定逾時期,則返回None。
s.fileno() 返回通訊端的檔案描述符。
s.setblocking(flag) 如果flag為0,則將通訊端設為非阻塞模式,否則將通訊端設為阻塞模式(預設值)。非阻塞模式下,如果調用recv()沒有發現任何資料,或send()調用無法立即發送資料,那麼將引起socket.error異常。
s.makefile() 建立一個與該通訊端相關連的檔案
簡單一實例服務端

我們使用 socket 模組的 socket 函數來建立一個 socket 對象。socket 對象可以通過調用其他函數來設定一個 socket 服務。

現在我們可以通過調用 bind(hostname, port) 函數來指定服務的 port(連接埠)

接著,我們調用 socket 對象的 accept 方法。該方法等待用戶端的串連,並返回 connection 對象,表示已串連到用戶端。

完整代碼如下:

#!/usr/bin/python# -*- coding: UTF-8 -*-# 檔案名稱:server.pyimport socket               # 匯入 socket 模組s = socket.socket()         # 建立 socket 對象host = socket.gethostname() # 擷取本地主機名稱port = 12345                # 設定連接埠s.bind((host, port))        # 綁定連接埠s.listen(5)                 # 等待用戶端串連while True:    c, addr = s.accept()     # 建立用戶端串連。    print ‘串連地址:‘, addr    c.send(‘歡迎訪問菜鳥教程!‘)    c.close()                # 關閉串連
用戶端

接下來我們寫一個簡單的用戶端執行個體串連到以上建立的服務。連接埠號碼為 12345。

socket.connect(hosname, port ) 方法開啟一個 TCP 串連到主機為 hostname 連接埠為 port 的服務商。串連後我們就可以從服務端擷取資料,記住,操作完成後需要關閉串連。

完整代碼如下:

#!/usr/bin/python# -*- coding: UTF-8 -*-# 檔案名稱:client.pyimport socket               # 匯入 socket 模組s = socket.socket()         # 建立 socket 對象host = socket.gethostname() # 擷取本地主機名稱port = 12345                # 設定連接埠好s.connect((host, port))print s.recv(1024)s.close()

現在我們開啟兩個終端,第一個終端執行 server.py 檔案:

$ python server.py

第二個終端執行 client.py 檔案:

$ python client.py 歡迎訪問菜鳥教程!

這時我們再開啟第一個終端,就會看到有以下資訊輸出:

串連地址: (‘192.168.0.118‘, 62461)
Python Internet 模組

以下列出了 Python 網路編程的一些重要模組:

協議 功能用處 連接埠號碼 Python 模組
HTTP 網頁訪問 80 httplib, urllib, xmlrpclib
NNTP 閱讀和張貼新聞文章,俗稱為"文章" 119 nntplib
FTP 檔案傳輸 20 ftplib, urllib
SMTP 發送郵件 25 smtplib
POP3 內送郵件 110 poplib
IMAP4 擷取郵件 143 imaplib
Telnet 命令列 23 telnetlib
Gopher 資訊尋找 70 gopherlib, urllib

更多內容可以參閱官網的 Python Socket Library and Modules。

Python 網路編程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.