【Python高階程式設計034 ● 靜態web伺服器 ● 靜態Web伺服器-返回固定頁面資料】
阿新 • • 發佈:2020-09-14
---------Python基礎程式設計---------
Author : AI菌
【內容講解】
一、解釋: 能夠同時服務於多個客戶端的TCP服務端程式 二、具體實現步驟 1、編寫一個TCP服務端程式,迴圈等待接受客戶端的連線請求 2、當客戶端和服務端建立連線成功,建立子執行緒,使用子執行緒專門處理客戶端的請求,防止主執行緒阻塞 3、把建立的子執行緒設定成為守護主執行緒,防止主執行緒無法退出。
【程式碼演示】
""" 一、解釋: 能夠同時服務於多個客戶端的TCP服務端程式 二、具體實現步驟 1、編寫一個TCP服務端程式,迴圈等待接受客戶端的連線請求 2、當客戶端和服務端建立連線成功,建立子執行緒,使用子執行緒專門處理客戶端的請求,防止主執行緒阻塞 3、把建立的子執行緒設定成為守護主執行緒,防止主執行緒無法退出。 """ import socket import threading # 處理客戶端請求的函式 def handle_client(new_socket, ip_port): # 迴圈接收客戶端的資料 while True: # 接收客戶端傳送的資料 recv_data = new_socket.recv(1024) if recv_data: # 對二進位制資料進行解碼 recv_content = recv_data.decode("utf-8") print("接收客戶端的資料為:", recv_content) # 傳送資料 new_socket.send("服務端".encode("utf-8")) else: print("客戶端下線:", ip_port) break # 關閉套接字 new_socket.close() if __name__ == '__main__': # 建立tcp服務端套接字 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 設定埠號複用,程式退出埠號立即釋放 tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 繫結埠號 tcp_server_socket.bind(("", 9090)) # 設定監聽 tcp_server_socket.listen(128) # 迴圈等待接受客戶端的連線請求 while True: # 等待接受客戶端的連線請求 new_socket, ip_port = tcp_server_socket.accept() print("客戶端為:", ip_port) # 建立子執行緒,專門負責處理客戶端請求 sub_thread = threading.Thread(target=handle_client, args=(new_socket, ip_port)) # 設定守護主執行緒,防止服務端無法關閉 sub_thread.setDaemon(True) # 啟動子執行緒執行任務 sub_thread.start() # 提示: 服務端程式需要一直執行,所以tcp服務端的套接字可以不用關閉 # tcp_server_socket.close()
【執行結果】
【往期精彩】
▷【Python基礎程式設計196 ● 讀取檔案的4種方式】
▷【Python基礎程式設計197 ● 讀取檔案的4種方式】
▷【Python基礎程式設計198 ● 讀取檔案的4種方式】
▷【Python基礎程式設計199 ● Python怎麼讀/寫很大的檔案】
▷【Python基礎程式設計200 ● 讀取檔案的4種方式】
▷【Python基礎程式設計201 ● 讀取檔案的4種方式】
▷【Python基礎程式設計202 ● 讀取檔案的4種方式】
▷【Python基礎程式設計203 ● 讀取檔案的4種方式】
【加群交流】