天天看點

python——網絡通信基礎一、socket子產品3、建立socket

所謂網絡程式設計就是:讓在不同的電腦上的軟體能夠進行資料傳遞,即程序之間的通信。

Python提供了兩個基本的socket子產品。一個是socket,它提供了标準的BSD Socket API;另一個是socketServer,它提供了伺服器中心類,可以簡化網絡伺服器的開發。

1. 了解socket: socket是作業系統I/O系統的延伸部分,它擴充了作業系統的基本I/O到網絡通信,使程序和機器之間的通信成為可能。建立 socket 需要通過調用 socket() 函數,并且還需要另外的調用來連接配接和激活它們( recv() 和 send() ) 。

2. 建立socket:首先需要建立一個實際的socket對象,其次需要把它連接配接到遠端伺服器上。建立socket對象的時候需要告訴系統兩件事情:通信協定和協定家族。

  • 通信協定:Internet通信類型基本上都是AF_INET(IPV4)
  • 協定家族:SOCK_STREAM ( TCP通信 ) 或 SOCK_DGRAM ( UDP通信 ) 。

開始了解socket子產品前,先熟悉下Python的網絡程式設計子產品主要支援的兩種Intent協定:TCP和UDP。TCP協定是一種面向連接配接的可靠協定,用于建立機器之間的雙向通信流。UDP協定是一種較低級别的、以資料包為基礎的協定(無連接配接傳輸模式)。與TCP不同,UDP資訊不可靠。

下圖列出了兩者的通信流程,左圖為TCP連接配接協定,右圖為UDP連接配接協定:

python——網絡通信基礎一、socket子產品3、建立socket
python——網絡通信基礎一、socket子產品3、建立socket

一、socket子產品

1、socket子產品的部分類方法介紹

類方法 說明
socket.socket(AddressFamily, type[,proto]) 建立并傳回一個新的 socket對象
socket.getfqdn(name) 将使用點号分隔的 IP位址字元串轉換成一個完整的域名
socket.gethostbyname(hostname) 将主機名解析為一個使用點号分隔的 IP位址字元串
socket.gethostbyname_ex(name) 它傳回一個包含三個元素的元組,從左到右分别是給定位址的主要的主機名、同一IP位址的可選的主機名的一個清單、關于同一主機的同一接口的其它IP位址的一個清單(清單可能都是空的)。
socket.gethostbyaddr(address) 作用與gethostbyname_ex相同,隻是你提供給它的參數是一個IP位址字元串
Socket.getservbyname(service,protocol) 它要求一個服務名(如'telnet'或'ftp')和一個協定(如'tcp'或'udp'),傳回服務所使用的端口号
socket.fromfd(fd, family, type) 從現有的檔案描述符建立一個 socket對象

2、socket對象的部分方法介紹

執行個體方法 說明
sock.bind( (adrs, port) ) 将 socket綁定到一個位址和端口上
sock.accept() 傳回一個客戶機 socket(帶有客戶機端的位址資訊)
sock.listen(backlog) 将 socket設定成監聽模式,能夠監聽 backlog 外來的連接配接請求
sock.connect( (adrs, port) ) 将 socket連接配接到定義的主機和端口上
sock.recv( buflen[, flags] ) 從 socket中接收資料,最多 buflen 個字元
sock.recvfrom( buflen[, flags] ) 從 socket中接收資料,最多 buflen 個字元,同時傳回資料來源的遠端主機和端口号
sock.send( data[, flags] ) 通過 socket發送資料
sock.sendto( data[, flags], addr ) 通過 socket發送資料
sock.close() 關閉 socket
sock.getsockopt( lvl, optname ) 獲得指定 socket 選項的值
sock.setsockopt( lvl, optname, val ) 設定指定 socket選項的值

3、建立socket

建立udp socket:s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

建立 tcp socket:s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

繼續閱讀