簡體   English   中英

有沒有辦法檢查套接字是否仍在運行?

[英]Is there a way to check if a socket is still running?

我需要在兩個客戶之間進行聊天。 但是我不知道套接字何時關閉,有沒有辦法檢查它是否關閉?

這是我需要修復的代碼部分:

def main():
    """Implements the conversation with server."""
    # Open client socket, Transport layer: protocol TCP, Network layer: protocol IP
    client_socket = socket.socket()
    client_socket.connect((HOST_IP, PORT))

    # start conversation with new client in parallel thread
    name = input("enter your name ")
    protocol.send_request(client_socket, name)
    thread_for_responses = threading.Thread(target=get_responses,
                                            args=(client_socket, ))
    thread_for_responses.start()

    while True:
        # Get request from keyboard
        client_request_str = input()
        if client_request_str:  # if client_request_str not empty string
            # send request according to the protocol
            protocol.send_request(client_socket, client_request_str)
            # Get response from server

而不是while True ,我需要檢查套接字是否已關閉,因此它不會 go 進入一個循環,在該循環中它將因使用封閉的套接字而崩潰。

Python 程序員通常說請求寬恕比請求許可更容易。 他們的意思是“處理異常”。

例如,您不能除以零。 這里有兩種方法可以處理這個事實:

def print_quotient(a, b):
    if b == 0:
        print("quotient is not a number")
    else:
        print("quotient is {}".format(a / b))

對比

def print_quotient(a, b):
    try:
        print("quotient is {}".format(a / b))
    except ZeroDivisionError:
        print("quotient is not a number")

這些函數的行為方式相同,因此您采用哪種方法並沒有太大區別。 這是因為b不能改變。 這與您的套接字可以更改的示例不同。 外部因素會影響它的 state,這會改變嘗試使用它的行為(例如,用它發送字節)。 在這種情況下,異常處理是優越的,因為它不必嘗試確保 go 不會出錯,它只是在 go 出錯時處理事情。 沒有任何情況下代碼認為它已將所有內容設置為正常工作,然后結果發現它錯過了一些東西。

因此,當您使用套接字操作時,請對可能由這些操作產生的任何異常應用異常處理。

暫無
暫無

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

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