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