c盤清理的步驟是什么(如何清理C盤空間)
如何清理C盤空間怎么清理C盤的垃圾文件?每天上網會給電腦帶來很多臨時文件,這些垃圾文件不清理掉時間久了就會影響到電腦的運行速度。那怎
2022/12/08
(資料圖片)
目前我們開發的TCP服務端程序只能服務于一個客戶端,如何開發一個多任務版的TCP服務端程序能夠服務于多個客戶端呢?
完成多任務,可以使用線程,比進程更加節省內存資源。
import socketimport threading# 處理客戶端的請求操作def handle_client_request(service_client_socket, ip_port): # 循環接收客戶端發送的數據 while True: # 接收客戶端發送的數據 recv_data = service_client_socket.recv(1024) # 容器類型判斷是否有數據可以直接使用if語句進行判斷,如果容器類型里面有數據表示條件成立,否則條件失敗 # 容器類型: 列表、字典、元組、字符串、set、range、二進制數據 if recv_data: print(recv_data.decode("gbk"), ip_port) # 回復 service_client_socket.send("ok,問題正在處理中...".encode("gbk")) else: print("客戶端下線了:", ip_port) break # 終止和客戶端進行通信 service_client_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)) # 設置監聽, listen后的套接字是被動套接字,只負責接收客戶端的連接請求 tcp_server_socket.listen(128) # 循環等待接收客戶端的連接請求 while True: # 等待接收客戶端的連接請求 service_client_socket, ip_port = tcp_server_socket.accept() print("客戶端連接成功:", ip_port) # 當客戶端和服務端建立連接成功以后,需要創建一個子線程,不同子線程負責接收不同客戶端的消息 sub_thread = threading.Thread(target=handle_client_request, args=(service_client_socket, ip_port)) # 設置守護主線程 sub_thread.setDaemon(True) # 啟動子線程 sub_thread.start() # tcp服務端套接字可以不需要關閉,因為服務端程序需要一直運行 # tcp_server_socket.close() 執行結果:客戶端連接成功: ("172.16.47.209", 51528)客戶端連接成功: ("172.16.47.209", 51714)hello1 ("172.16.47.209", 51528)hello2 ("172.16.47.209", 51714)
while True: service_client_socket, ip_port = tcp_server_socket.accept()當客戶端和服務端建立連接成功,創建子線程,使用子線程專門處理客戶端的請求,防止主線程阻塞
while True: service_client_socket, ip_port = tcp_server_socket.accept() sub_thread = threading.Thread(target=handle_client_request, args=(service_client_socket, ip_port)) sub_thread.start()把創建的子線程設置成為守護主線程,防止主線程無法退出。
while True: service_client_socket, ip_port = tcp_server_socket.accept() sub_thread = threading.Thread(target=handle_client_request, args=(service_client_socket, ip_port)) sub_thread.setDaemon(True) sub_thread.start()