1. 程式人生 > 實用技巧 >【Python高階程式設計034 ● 靜態web伺服器 ● 靜態Web伺服器-返回固定頁面資料】

【Python高階程式設計034 ● 靜態web伺服器 ● 靜態Web伺服器-返回固定頁面資料】


---------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種方式】

【加群交流】