首页 > 解决方案 > python UDP套接字检查连接

问题描述

我有一个通过 UDP 工作的小型 python 控制台。我遇到的问题是,如果我突然断开与客户端的连接,则连接在 netstat 中保持打开状态(因为它是 UDP)。

我尝试threading.Timer在服务器中实现一个询问连接是否处于活动状态,如果客户端在这段时间内没有响应,则连接从服务器端关闭。

这是我尝试过的

def check_conn(sock: socket.socket):
    # sock.settimeout()
    sock.send(b"\nAwake?")
    try:
        ack = sock.recv(1024)
        ack = ack.decode("UTF-8")
        if ack.strip() == "Yea":
            pass
        else:
            sock.close()
    except:
        sock.close()


so = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
so.connect((host, port))
t = threading.Timer(10.0, check_conn, [so])
t.start()
data = so.recv(1024)
#rest of the main program

我遇到的问题是,当它要求输入密码时,有两个so.recv(1024)是打开的,并且它不知道如何处理它们(这是我的猜测)。

标签: pythonsocketsudp

解决方案


推荐阅读