Python實(shí)現(xiàn)基本Socket服務(wù)端與客戶端通信的完整代碼
該文章使用 python 實(shí)現(xiàn)基本的 socket 服務(wù)端與客戶端通信,分步詳解與完整代碼都有,按需所求即可。
(一)服務(wù)端代碼:
1. 引入自帶的socket模塊,并創(chuàng)建一個(gè)socket實(shí)例,服務(wù)端需要使用 bind 將該實(shí)例綁定到指定域名與端口下,域名與端口號(hào)放在元組中傳入
import socket #創(chuàng)建 socket對(duì)象 socket_server=socket.socket() # 綁定 socket_server到指定的ip地址 socket_server.bind(("localhost",8888))
2. 設(shè)置端口監(jiān)聽(tīng),listen() 內(nèi)書(shū)寫(xiě)數(shù)字,表示可以接受鏈接的數(shù)量
#監(jiān)聽(tīng)端口 socket_server.listen(1)
3. 使用 accept 方法 等待客戶端連接,該方法是個(gè)阻塞方法,沒(méi)有鏈接則會(huì)一直阻塞在此步。連接成功會(huì)返回一個(gè)元組,元組內(nèi)分別為 連接對(duì)象 與 客戶端地址信息
result=socket_server.accept() conn=result[0] #客戶端連接對(duì)象 address=result[1] #客戶端地址信息
4. 使用連接對(duì)象的 recv 方法 接收客戶端發(fā)來(lái)的消息,1024表緩沖區(qū)大小,可自行設(shè)置,并解碼為UTF-8 格式
data = conn.recv(1024).decode("UTF-8") print(f"客戶端發(fā)來(lái)的消息是:{data}")
5. 使用連接對(duì)象的 send 方法 給客戶端發(fā)送消息
msg=input("請(qǐng)輸入回復(fù)的消息:") conn.send(msg.encode("UTF-8"))
6. 通信結(jié)束后分別斷開(kāi)鏈接
conn.close() socket_server.close()
完整服務(wù)端代碼:
import socket #創(chuàng)建 socket對(duì)象 socket_server=socket.socket() # 綁定 socket_server到指定的ip地址 socket_server.bind(("localhost",8888)) #監(jiān)聽(tīng)端口, listen()內(nèi)書(shū)寫(xiě)數(shù)字,表示可以接受鏈接的數(shù)量 socket_server.listen(1) #等待客戶端連接,接收到的 result是一個(gè)二元元組, accept()是一個(gè)阻塞的方法,如果沒(méi)有連接不會(huì)往下執(zhí)行 result=socket_server.accept() conn=result[0] #客戶端連接對(duì)象 address=result[1] #客戶端地址信息 print(f"接收到的客戶端連接信息為{address}") while True: #接收客戶端信息,recv接受的參數(shù)是緩沖區(qū)大小,一般1024即可,返回的是一個(gè)字節(jié)數(shù)組,bytes對(duì)象,不是字符串,再將其decode解碼為字符串對(duì)象 data = conn.recv(1024).decode("UTF-8") print(f"客戶端發(fā)來(lái)的消息是:{data}") #回復(fù)消息 msg=input("請(qǐng)輸入回復(fù)的消息:") if msg=='exit': break conn.send(msg.encode("UTF-8")) #關(guān)閉連接 conn.close() socket_server.close()
(二)客戶端代碼:
1. 引入自帶的socket模塊,并創(chuàng)建一個(gè)socket實(shí)例,然后鏈接服務(wù)端的域名與端口,也是元組作為參數(shù)傳入
import socket #創(chuàng)建 socket對(duì)象 socket_client=socket.socket() # 讓 socket對(duì)象 socket_client 連接到服務(wù)端 socket_client.connect(("localhost",8888))
2. 然后就可以使用 send 給服務(wù)端發(fā)送消息
msg=input("請(qǐng)輸入你要發(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對(duì)象 socket_client=socket.socket() # 讓 socket對(duì)象 socket_client 連接到服務(wù)端 socket_client.connect(("localhost",8888)) while True: msg=input("請(qǐng)輸入你要發(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實(shí)現(xiàn)基本Socket服務(wù)端與客戶端通信的文章就介紹到這了,更多相關(guān)Python Socket服務(wù)端與客戶端內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python數(shù)據(jù)結(jié)構(gòu)列表
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)列表,本文重點(diǎn)內(nèi)容主要是對(duì)列表數(shù)據(jù)結(jié)構(gòu)的使用,在Python中,序列是一組按順序排列的值。Python?有?3?種內(nèi)置的序列類(lèi)型:字符串、?元組和列表,下面一起進(jìn)入文章了解更詳細(xì)內(nèi)容吧,需要的小伙伴可以參考一下</P><P>2021-12-12Pythony運(yùn)維入門(mén)之Socket網(wǎng)絡(luò)編程詳解
這篇文章主要介紹了Pythony運(yùn)維入門(mén)之Socket網(wǎng)絡(luò)編程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Python 切片索引越界的問(wèn)題(數(shù)組下標(biāo)越界)
Python語(yǔ)言處理字符串、數(shù)組類(lèi)的問(wèn)題時(shí)有一定概率需要使用切片方法,本文主要介紹了Python 切片索引越界的問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12Python中的數(shù)據(jù)對(duì)象持久化存儲(chǔ)模塊pickle的使用示例
這篇文章主要介紹了Python中的數(shù)據(jù)對(duì)象持久化存儲(chǔ)模塊pickle的使用示例,重點(diǎn)講解了pickle中模塊中對(duì)象持久化和文件讀取的相關(guān)方法,需要的朋友可以參考下2016-03-03Python Numpy 自然數(shù)填充數(shù)組的實(shí)現(xiàn)
今天小編就為大家分享一篇Python Numpy 自然數(shù)填充數(shù)組的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11win10環(huán)境下配置vscode python開(kāi)發(fā)環(huán)境的教程詳解
這篇文章主要介紹了win10環(huán)境下配置python開(kāi)發(fā)環(huán)境(vscode)的教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10python實(shí)現(xiàn)簡(jiǎn)易數(shù)碼時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)易數(shù)碼時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11Python列表(list)、字典(dict)、字符串(string)基本操作小結(jié)
這篇文章主要介紹了Python列表(list)、字典(dict)、字符串(string)基本操作小結(jié),本文總結(jié)了最基本最常用的一些操作,需要的朋友可以參考下2014-11-11使用Python實(shí)現(xiàn)企業(yè)微信的自動(dòng)打卡功能
下面就通過(guò)Python程序來(lái)實(shí)現(xiàn)自動(dòng)打卡,原理很簡(jiǎn)單,用Python設(shè)置定時(shí)任務(wù),然后通過(guò)adb操作手機(jī),完成打卡功能,感興趣的朋友跟隨小編一起看看吧2019-04-04