什么是socket?
簡稱套接字,是進程間通信的一種方式,它與其他進程間通信的一個主要不同是:它能實現不同主機間的進程間通信,我們網絡上各種各樣的服務大多數是基于socket來完成通信的。
socket是基于C/S架構的,也就是說socket網絡編程,通常需要寫兩個文件,一個服務端,一個客戶端。
Python中的socket通信邏輯如下圖所示
在python中,用socket.socket()方法來創建套接字
s = socket.socket([family[, type[, proto]]])
參數說明:
family:套接字家族,可以使用AF_UNIX或者AF_INET
type:套接字類型,分為SOCK_STREAM或者SOCK_DGRAM,分別代表TCP和UDP
protocol: 一般不填默認為0
注意
1、python3以后,socket傳遞的都是bytes類型的數據,字符串需要先轉換一下,string.encode()即可;另一端在接收數據的時候需要bytes轉換成字符串,只要bytes.decode()一下就可以
2、在正常通信時,accept()和recv()方法都是阻塞的。所謂的阻塞,指的是程序會暫停在哪,一直等數據過來
socket編程思路
服務端 TCP
1 創建套接字,綁定套接字到本地IP與端口:socket.socket(scoket.AF_INET,socket.SOCK_STREAM), s.bind()
2 開始監聽鏈接:s.listen()
3 進入循環,不斷接受客戶端的鏈接請求:s.accept()
4 接收傳來的數據,或者發送數據給對方:s.recv() , s.sendall()
5 傳輸完畢后,關閉套接字:s.close()
客戶端
1 創建套接字,連接服務器地址:socket.socket(scoket.AF_INET,socket.SCOK_STREAM),s.connect()
2 連接后發送數據和接收數據: s.sendall(),s.recv()
3 傳輸完畢后,關閉套接字:s.close()
python的socket編程,通常可以分為TCP和UDP編程兩種,前者是連接的可靠傳輸服務,每次通信都要握手,結束傳輸也要揮手,數據會被檢驗,是使用最廣的通用模式;后者是不帶連接的傳輸服務,簡單粗暴
TCP編程
服務器端:
客戶端:
雖然服務器和客戶端在一對一的情況下,工作良好,但是,如果有多個客戶端同時連接同一個服務器呢?結果可能不太令人滿意,因為服務器無法同時對多個客戶端提供服務。為什么會這樣呢?因為Python的socket模塊,默認情況下創建的是單進程單線程,同時只能處理一個連接請求,如果要實現多用戶服務,那么需要使用多線程機制
責任編輯:wv
-
Socket
+關注
關注
0文章
212瀏覽量
34665 -
編程
+關注
關注
88文章
3614瀏覽量
93686
發布評論請先 登錄
相關推薦
評論