繁体   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