我需要在两个客户之间聊天。但是我不知道什么时候关闭插座,有没有办法检查插座是否闭合?
这是我需要修复的代码部分:
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
,以免它陷入因使用闭合的套接字而崩溃的循环。
答案 0 :(得分:0)
Python程序员通常说,请求宽恕比请求许可容易。他们的意思是“处理异常”。
例如,您不能除以零。您可以通过以下两种方式处理此事实:
def print_quotient(a, b):
if b == 0:
print("quotient is not a number")
else:
print("quotient is {}".format(a / b))
vs
def print_quotient(a, b):
try:
print("quotient is {}".format(a / b))
except ZeroDivisionError:
print("quotient is not a number")
这些函数的行为方式相同,因此采用哪种方法并没有太大区别。这是因为b
无法更改。这与您可以更改套接字 的示例不同。外部因素会影响其状态,这会改变尝试使用它的行为(例如,随其发送字节)。在这种情况下,异常处理是上乘的,因为它不必试图确保什么都不会出错,它只会在出错时处理事情。在任何情况下,代码都不会认为它已使一切正常工作,然后发现它遗漏了一些东西。
因此,当您使用套接字操作时,应对那些操作可能引起的任何异常进行异常处理。