python多線程實現(xiàn)TCP服務(wù)端
本文實例為大家分享了python多線程實現(xiàn)TCP服務(wù)端的具體代碼,供大家參考,具體內(nèi)容如下
需求
1.創(chuàng)建一個TCP服務(wù)器接收服務(wù)端發(fā)送的信息并給予答復(fù)
2.以多線程方式實現(xiàn)接收客戶端信息
3.間客戶端發(fā)送的信息解碼輸出
思路分析
1.創(chuàng)建一個TCP客戶端套接字
2.寫一個接收消息的方法,可以接收客戶端消息并解碼輸出
3.客戶端被動監(jiān)聽,每有一個客戶端連接就創(chuàng)建一個子線程執(zhí)行接收消息方法
代碼實現(xiàn)
# 導(dǎo)入模塊 import socket import threading # 接收消息 def recv(client_socket, ip_port): while True: client_text = client_socket.recv(1024) # 如果接收的消息長度不為0,則將其解碼輸出 if client_text: print("[客戶端消息]", ip_port, ":", client_text.decode("gbk")) # 給客戶端響應(yīng) client_socket.send("收到\n".encode()) # 當(dāng)客戶端斷開連接時,會一直發(fā)送''空字符串,所以長度為0已下線 else: print("客戶端", ip_port, "已下線") client_socket.close() break # 程序主入口 def main(): # 創(chuàng)建TCP套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 設(shè)置端口復(fù)用 tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 綁定端口 tcp_socket.bind(("", 8080)) # 設(shè)置為被動監(jiān)聽狀態(tài),128表示最大連接數(shù) tcp_socket.listen(128) while True: # 等待客戶端連接 client_socket, ip_port = tcp_socket.accept() print("[新客戶端]:", ip_port, "已連接") # 有客戶端連接后,創(chuàng)建一個線程將客戶端套接字,IP端口傳入recv函數(shù), t1 = threading.Thread(target=recv, args=(client_socket, ip_port)) # 設(shè)置線程守護 t1.setDaemon(True) # 啟動線程 t1.start() if __name__ == '__main__': main()
執(zhí)行結(jié)果
接收客戶端消息
響應(yīng)客戶端消息
客戶端下線后識別
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python3 socket即時通訊腳本實現(xiàn)代碼實例(threading多線程)
- python使用多線程+socket實現(xiàn)端口掃描
- 解決python ThreadPoolExecutor 線程池中的異常捕獲問題
- 解決python多線程報錯:AttributeError: Can''t pickle local object問題
- python實現(xiàn)自動化報表功能(Oracle/plsql/Excel/多線程)
- Python實現(xiàn)多線程/多進程的TCP服務(wù)器
- python使用多線程編寫tcp客戶端程序
- Python3多線程版TCP端口掃描器
- python單線程下實現(xiàn)多個socket并發(fā)過程詳解
- 詳解C語言和Python中的線程混用
相關(guān)文章
Python實現(xiàn)有趣的親戚關(guān)系計算器
每年的春節(jié),都會有一些自己幾乎沒印象但父母就是很熟的親戚,關(guān)系凌亂到你自己都說不清。本文就來用Python制作一個有趣的親戚關(guān)系計算器,感興趣的可以了解一下2023-01-01基于tensorflow __init__、build 和call的使用小結(jié)
這篇文章主要介紹了基于tensorflow __init__、build 和call的使用小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02