我有一个可在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)
处于打开状态,并且它不知道如何处理它们(这是我的猜测)。