您好,登錄后才能下訂單哦!
本文實例為大家分享了python多線程實現TCP服務端的具體代碼,供大家參考,具體內容如下
需求
1.創建一個TCP服務器接收服務端發送的信息并給予答復
2.以多線程方式實現接收客戶端信息
3.間客戶端發送的信息解碼輸出
思路分析
1.創建一個TCP客戶端套接字
2.寫一個接收消息的方法,可以接收客戶端消息并解碼輸出
3.客戶端被動監聽,每有一個客戶端連接就創建一個子線程執行接收消息方法
代碼實現
# 導入模塊 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")) # 給客戶端響應 client_socket.send("收到\n".encode()) # 當客戶端斷開連接時,會一直發送''空字符串,所以長度為0已下線 else: print("客戶端", ip_port, "已下線") client_socket.close() break # 程序主入口 def main(): # 創建TCP套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 設置端口復用 tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 綁定端口 tcp_socket.bind(("", 8080)) # 設置為被動監聽狀態,128表示最大連接數 tcp_socket.listen(128) while True: # 等待客戶端連接 client_socket, ip_port = tcp_socket.accept() print("[新客戶端]:", ip_port, "已連接") # 有客戶端連接后,創建一個線程將客戶端套接字,IP端口傳入recv函數, t1 = threading.Thread(target=recv, args=(client_socket, ip_port)) # 設置線程守護 t1.setDaemon(True) # 啟動線程 t1.start() if __name__ == '__main__': main()
執行結果
接收客戶端消息
響應客戶端消息
客戶端下線后識別
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。