python之網路程式設計 socket(套接字)

2021-08-23 12:34:30 字數 1620 閱讀 5919

python2.x/python3.x 對於網路程式設計的支援都是非常友好的,本身支援兩部分非常有用的網路程式設計方式

socket是一種計算機網路資料結構,中文譯名:套接字

socket 最初是為同一主機上的應用程式建立,是的主機上執行的乙個程式與另乙個程式之間可以完成資料通訊操作,程式也稱為程序,就出現了不同程序間進行資料互動的操作,因為互動的模式不同,所以也一般將程式中的套接字區分為兩種

套接字最初出現之後,為了區分不同平台不同體系的套接字模型物件,定義了位址家族的概念:adress family,也經常簡寫為 af。

unix 系統中的套接字就是第一種家族套接字,稱為 af_unix,或者 af_local,這是 posix1標準中規範的。

同樣也有一些體系平台下,對於套接字的劃分通過協議家族(protocal family)進行規範,可以簡寫為 pf,考慮到相容性的要求,pf 和af 在一些平台上都整合了互相相容的實現,我們的 python 本身支援的是更加標準化的 af 位址家族

另一種位址家族就是面向網路的套接字模型物件了,經典的如 af_inet 支援的是傳統第四個版本的網際網路協議定址[ipv4],同時也提供了 af_inet6 用於支援第六個版本的網際網路協議定址[ipv6]

在網路套接字互動過程中,出現了兩種型別的套接字模型

比較經典的如 tcp 端對端傳輸協議就是面向連線的套接字物件

比較經典的 udp 廣播協議使用的就是面向無連線的套接字物件

socket.socket(socket_family, socket_type, protocal=0)

socket_type:socket 連線型別

面向連線的(sock_stream),面向無連線的(sock_dgrame)

protocal:傳輸協議,一般不用設定,使用預設值進行自動匹配就好

tcp_socket = socket.socket(socket.af_inet, socket.sock_stream)
udp_socket = socket.socket(socket.af_inet, socket.sock_dgram)
屬性

描述s.bind()

繫結(主機名稱、埠)到乙個套接字上

s.listen()

設定並啟動tcp監聽

s.accept()

等待客戶鏈結

s.connect()

連線指定伺服器

s.connect_ex()

連線指定伺服器,如果出錯返回錯誤資訊

s.recv()

接受tcp訊息

s.recv_into()

接受tcp訊息到緩衝池

s.send()

傳送tcp訊息

s.sendall()

完整傳送tcp訊息

s.recvfrom()

接受 udp訊息

s.recvfrom_into()

接受 udp 訊息到緩衝區

s.sendto()

傳送 udp 訊息

s.shutdown()

關閉連線物件

s.close()

關閉套接字物件

網路程式設計 Python網路程式設計詳解socket

1 伺服器就是一系列硬體或軟體,為乙個或多個客戶端 服務的使用者 提供所需的 服務 它存在唯一目的就是等待客戶端的請求,並響應它們 提供服務 然後等待更多請求。2 客戶端 伺服器架構既可以應用於計算機硬體,也可以應用於計算機軟體。3 在伺服器響應客戶端之前,首先會建立乙個通訊節點,它能夠使伺服器監聽...

linux socket網路程式設計之socket屬性

1.函式用法 include include int getsockopt int sockfd,int level,int optname,void optval,socklen t optlen 函式用於獲得某個套接字的屬性 int setsockopt int sockfd,int level...

sock程式設計學習2

面向連線的服務sock stream sock seqpacket,在開始交換資料之前,需要在請求服務的程序套接字和提供服務的程序套接字之間建立乙個連線 客戶端通過呼叫connect.int connect int sockfd const struct addr,socklen t len 在co...