[英]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.