1. 程式人生 > 程式設計 >python多執行緒實現TCP服務端

python多執行緒實現TCP服務端

本文例項為大家分享了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("客戶端","已下線")
      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埠傳入recv函式,
    t1 = threading.Thread(target=recv,args=(client_socket,ip_port))
    # 設定執行緒守護
    t1.setDaemon(True)
    # 啟動執行緒
    t1.start()


if __name__ == '__main__':
  main()

執行結果

接收客戶端訊息

這裡寫圖片描述

響應客戶端訊息

這裡寫圖片描述

客戶端下線後識別

這裡寫圖片描述

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。