1. 程式人生 > 實用技巧 >python網路程式設計TCP服務多客戶端的服務端開發

python網路程式設計TCP服務多客戶端的服務端開發

#服務多客戶端TCP服務端開發                                   2 #方法說明
  3 """
  4 bind(host,port)表示繫結埠號,host是ip地址,ip地址一般不進
    行繫結,表示本機的任何一個ip地址都行,port是埠號
  5 listen(backlog)表示設定監聽,backlog引數表示最大等待連線的>    個數
  6 accept()表示等待接受客戶端的連線請求
  7 """
  8 import socket
  9 import threading
 10 #處理客戶端請求
 11 def client_socket(ip_port,new_client):#子執行緒來完成
 
12 print("客戶端的ip和埠號為:",ip_port) 13 while True: 14 data = new_client.recv(1024) 15 if data: 16 #接受客戶端的收據 17 #對二進位制資料進行解碼 18 recv_data = data.decode("utf-8") 19 print("接收客戶端的資料為:",recv_data) 20 #傳送資料到客戶端 21 client_data = "
最偉大" 22 send_data = client_data.encode("utf-8") 23 new_client.send(send_data) 24 else: 25 print("客戶端下線了:",ip_port) 26 break 27 #關閉服務與客戶端套接字,表示終止服務端與客戶端通訊 28 new_client.close() 29 30 if __name__ == "__main__": 31 #建立服務端套接字物件
tcp_server_socket = socket.socket(socket.AF_INET,socket .SOCK_STREAM) 33 #繫結埠號 34 #ip地址一般不寫死,只要是本機電腦的任何一個ip地址都行 35 tcp_server_socket.bind(("",8080)) 36 #設定埠號複用:服務端程式退出後端口立即釋放 37 #1.socket.SOL_SOCKET:表示當前套接字 38 #2.socket.SO_REUSEADDR:表示複用埠號的選項 39 #3.True:確定複用 40 tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True) 41 #設定監聽 42 tcp_server_socket.listen(128) 43 #等待客戶端的連線請求 44 #注意點:每次當客戶端和服務端建立連線成功會返回一個新的> 套接字new_client 45 #tcp_server_socket套接字只負責接受連線請求,收發訊息只> 用返回的新套接字 46 while True: 47 new_client,ip_port = tcp_server_socket.accept() 48 #客戶端和服務端建立連線成功,建立子執行緒,讓子執行緒專 門負責接受客戶端訊息 49 sub_thread = threading.Thread(target = client_socket,args = (ip_port,new_client)) 50 #設定守護主執行緒,主執行緒退出子執行緒直接銷燬 51 sub_thread.setDaemon(True) 52 #關閉服務端套接字 53 sub_thread.start() 54 #服務端需要一直執行 55 #tcp_server_socket.close()

實現多工可以用程序或者執行緒來來完成

但開闢執行緒對資源的消耗比執行緒大,所以我們選擇建立子執行緒來完成伺服器服務於多客戶端