Python實(shí)現(xiàn)socket非阻塞通訊功能示例
本文實(shí)例講述了Python實(shí)現(xiàn)socket非阻塞通訊功能。分享給大家供大家參考,具體如下:
非阻塞需要多線程編程
服務(wù)端
方式1: 使用threading庫(kù)實(shí)現(xiàn)多線程
基本方法和單進(jìn)程基本寫法一致, 將收發(fā)部分封裝為函數(shù)以便開啟其他線程:
import socket
import time
import threading
def handle_socket(conn, addr):
while True:
data = conn.recv(1024)
print(data.decode('utf-8'))
time.sleep(3)
send_data = 'got it'
conn.send(send_data.encode('utf-8'))
conn.close()
基本設(shè)置和調(diào)用部分: 綁定, 監(jiān)聽, 接受連接:
if __name__ == '__main__':
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', 8888))
s.listen()
while True:
conn, addr = s.accept()
client_thread = threading.Thread(target=handle_socket, args=[conn, addr])
client_thread.start()
方式2: 通過繼承StreamRequestHandler庫(kù)實(shí)現(xiàn)多線程
收發(fā)部分寫到handle方法中:
import socketserver
from socketserver import StreamRequestHandler
import time
class MyHandler(StreamRequestHandler):
def handle(self):
# addr = self.request.getpeername()
# print('get connection from ', addr)
# self.wfile.write('hello, thank for your connection'.encode())
while True:
datarecv = self.request.recv(1024)
if not datarecv:
break
time.sleep(3)
print(datarecv.decode())
self.request.send("got it".encode())
開啟
myserver = socketserver.ThreadingTCPServer(('127.0.0.1', 8888), MyHandler)
myserver.serve_forever()
客戶端
客戶端:
import socket
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect(('127.0.0.1', 8888))
while True:
conn.send('hello'.encode())
data = conn.recv(1024)
print(data.decode())
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python Socket編程技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Python3使用TCP編寫一個(gè)簡(jiǎn)易的文件下載器功能
- python:socket傳輸大文件示例
- Python Socket傳輸文件示例
- python 通過 socket 發(fā)送文件的實(shí)例代碼
- 基于python3實(shí)現(xiàn)socket文件傳輸和校驗(yàn)
- python 使用socket傳輸圖片視頻等文件的實(shí)現(xiàn)方式
- 樹莓派采用socket方式文件傳輸(python)
- 使用python socket分發(fā)大文件的實(shí)現(xiàn)方法
- Python socket模塊ftp傳輸文件過程解析
- python socket 聊天室實(shí)例代碼詳解
- Python socket實(shí)現(xiàn)的文件下載器功能示例
相關(guān)文章
Python的Django框架中的數(shù)據(jù)過濾功能
這篇文章主要介紹了Python的Django框架中的數(shù)據(jù)過濾功能,為更新數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí)的數(shù)據(jù)查找提供了方便,需要的朋友可以參考下2015-07-07
Python3 常用數(shù)據(jù)標(biāo)準(zhǔn)化方法詳解
這篇文章主要介紹了Python3 常用數(shù)據(jù)標(biāo)準(zhǔn)化方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2021-03-03
pycharm連接虛擬機(jī)的實(shí)現(xiàn)步驟
本文主要介紹了pycharm連接虛擬機(jī)的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12
python通過Windows下遠(yuǎn)程控制Linux系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python通過Windows下遠(yuǎn)程控制Linux系統(tǒng),實(shí)現(xiàn)對(duì)socket模塊認(rèn)識(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
python人工智能human?learn繪圖創(chuàng)建機(jī)器學(xué)習(xí)模型
這篇文章主要為大家介紹了python人工智能human?learn繪圖就可以創(chuàng)建機(jī)器學(xué)習(xí)模型的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11
Python實(shí)戰(zhàn)之整蠱神器合集加速友盡
讀萬(wàn)卷書不如行萬(wàn)里路,學(xué)的扎不扎實(shí)要通過實(shí)戰(zhàn)才能看出來(lái),本篇文章手把手帶用python來(lái)做幾個(gè)整蠱的小程序,大家可以在過程中查缺補(bǔ)漏,看看自己掌握程度怎么樣,發(fā)給朋友加固一下友誼2021-10-10

