Python實現(xiàn)基本Socket服務(wù)端與客戶端通信的完整代碼
該文章使用 python 實現(xiàn)基本的 socket 服務(wù)端與客戶端通信,分步詳解與完整代碼都有,按需所求即可。
(一)服務(wù)端代碼:
1. 引入自帶的socket模塊,并創(chuàng)建一個socket實例,服務(wù)端需要使用 bind 將該實例綁定到指定域名與端口下,域名與端口號放在元組中傳入
import socket
#創(chuàng)建 socket對象
socket_server=socket.socket()
# 綁定 socket_server到指定的ip地址
socket_server.bind(("localhost",8888))2. 設(shè)置端口監(jiān)聽,listen() 內(nèi)書寫數(shù)字,表示可以接受鏈接的數(shù)量
#監(jiān)聽端口 socket_server.listen(1)
3. 使用 accept 方法 等待客戶端連接,該方法是個阻塞方法,沒有鏈接則會一直阻塞在此步。連接成功會返回一個元組,元組內(nèi)分別為 連接對象 與 客戶端地址信息
result=socket_server.accept() conn=result[0] #客戶端連接對象 address=result[1] #客戶端地址信息
4. 使用連接對象的 recv 方法 接收客戶端發(fā)來的消息,1024表緩沖區(qū)大小,可自行設(shè)置,并解碼為UTF-8 格式
data = conn.recv(1024).decode("UTF-8")
print(f"客戶端發(fā)來的消息是:{data}")5. 使用連接對象的 send 方法 給客戶端發(fā)送消息
msg=input("請輸入回復(fù)的消息:")
conn.send(msg.encode("UTF-8"))6. 通信結(jié)束后分別斷開鏈接
conn.close() socket_server.close()
完整服務(wù)端代碼:
import socket
#創(chuàng)建 socket對象
socket_server=socket.socket()
# 綁定 socket_server到指定的ip地址
socket_server.bind(("localhost",8888))
#監(jiān)聽端口, listen()內(nèi)書寫數(shù)字,表示可以接受鏈接的數(shù)量
socket_server.listen(1)
#等待客戶端連接,接收到的 result是一個二元元組, accept()是一個阻塞的方法,如果沒有連接不會往下執(zhí)行
result=socket_server.accept()
conn=result[0] #客戶端連接對象
address=result[1] #客戶端地址信息
print(f"接收到的客戶端連接信息為{address}")
while True:
#接收客戶端信息,recv接受的參數(shù)是緩沖區(qū)大小,一般1024即可,返回的是一個字節(jié)數(shù)組,bytes對象,不是字符串,再將其decode解碼為字符串對象
data = conn.recv(1024).decode("UTF-8")
print(f"客戶端發(fā)來的消息是:{data}")
#回復(fù)消息
msg=input("請輸入回復(fù)的消息:")
if msg=='exit':
break
conn.send(msg.encode("UTF-8"))
#關(guān)閉連接
conn.close()
socket_server.close()(二)客戶端代碼:
1. 引入自帶的socket模塊,并創(chuàng)建一個socket實例,然后鏈接服務(wù)端的域名與端口,也是元組作為參數(shù)傳入
import socket
#創(chuàng)建 socket對象
socket_client=socket.socket()
# 讓 socket對象 socket_client 連接到服務(wù)端
socket_client.connect(("localhost",8888))2. 然后就可以使用 send 給服務(wù)端發(fā)送消息
msg=input("請輸入你要發(fā)送的消息:")
socket_client.send(msg.encode("UTF-8"))3. 發(fā)送后使用 recv 等待接收服務(wù)端回復(fù)的消息,同樣需要設(shè)置緩沖區(qū)與解碼
data=socket_client.recv(1024).decode("UTF-8")
print(f"服務(wù)器回復(fù)的消息為:{data}")4. 通信結(jié)束后斷掉鏈接
socket_client.close()
完整客戶端代碼:
import socket
#創(chuàng)建 socket對象
socket_client=socket.socket()
# 讓 socket對象 socket_client 連接到服務(wù)端
socket_client.connect(("localhost",8888))
while True:
msg=input("請輸入你要發(fā)送的消息:")
if msg=='exit':
break
#發(fā)送消息
socket_client.send(msg.encode("UTF-8"))
#接收消息
data=socket_client.recv(1024).decode("UTF-8")
print(f"服務(wù)器回復(fù)的消息為:{data}")
socket_client.close()到此這篇關(guān)于Python實現(xiàn)基本Socket服務(wù)端與客戶端通信的文章就介紹到這了,更多相關(guān)Python Socket服務(wù)端與客戶端內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vscode autopep8無法格式化python代碼問題解決
這篇文章主要為大家介紹了vscode autopep8無法格式化python代碼問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
Python進階之@property動態(tài)屬性的實現(xiàn)
這篇文章主要介紹了Python進階之@property動態(tài)屬性的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Python通過OpenCV的findContours獲取輪廓并切割實例
這篇文章主要介紹了Python通過OpenCV的findContours獲取輪廓并切割實例,具有一定借鑒價值,需要的朋友可以參考下2018-01-01
pandas數(shù)據(jù)拼接的實現(xiàn)示例
這篇文章主要介紹了pandas數(shù)據(jù)拼接的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
python下函數(shù)參數(shù)的傳遞(參數(shù)帶星號的說明)
python中函數(shù)參數(shù)的傳遞是通過賦值來傳遞的。2010-09-09

