簡體   English   中英

使用 socket.recv 檢查傳入的數據類型

[英]check incoming type of data with socket.recv

我需要我的程序知道來自客戶端的消息是數字,因此是 int 或 float,還是字符串。

到現在為止,我的程序是這樣的:

    def handle_client_text(conn, addr):
    print(f"[NEW CONNECTION] {addr} connected.")
    
    connected = True
    while connected:
            msg_lenght = conn.recv(HEADER).decode(FORMAT)
            if msg_lenght:
                msg_lenght = int(msg_lenght)
                msg = conn.recv(msg_lenght).decode(FORMAT)
                if msg == DISCONNECT_MESSAGE:
                    connected = False
                    conn.close()
                    print ("disconnecting")
                print(f"[{addr}] {msg}")
            
        sleep(0.001)
    
def start():
    server.listen()
    print(f"[LISTENING] Server is listening on {SERVER}")
    while True:
        conn, addr = server.accept()
        thread = threading.Thread(target=handle_client_text, args=(conn, addr))
        thread.start()
        print(f"[ACTIVE CONNECTIONS] {threading.activeCount() - 1}")

我需要它可以接收字符串以外的數字,並且如果它是數字或字符串,它會以不同的方式運行。

此處未定義的每個變量都在代碼的另一部分中定義。

通過套接字傳入的數據是字節形式,當你decode()時它變成一個字符串,如果你分別用int()float()轉換它,它就會變成 int 或 float。

因此,如果您想根據其數據類型使用不同的邏輯,您應該檢查所有數字/點或字母數字字符以在數字和字符串數據類型之間進行分類。 或者,如果您可能必須將"12"視為字符串而不是 int,請將數據類型作為元數據從客戶端發送。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM