Python 我的原因是,您传递给它的第一个参数的套接字都不可读。对不起,我对select模块了解不多,但为什么套接字不可读?对于前两条消息,它工作正常,然后失败。您认为这是为什么?我的第一个猜测是,您的列表可能不包含您认为它包含的套接字(您可以在select()之前打

Python 我的原因是,您传递给它的第一个参数的套接字都不可读。对不起,我对select模块了解不多,但为什么套接字不可读?对于前两条消息,它工作正常,然后失败。您认为这是为什么?我的第一个猜测是,您的列表可能不包含您认为它包含的套接字(您可以在select()之前打,python,sockets,tcp,Python,Sockets,Tcp,我的原因是,您传递给它的第一个参数的套接字都不可读。对不起,我对select模块了解不多,但为什么套接字不可读?对于前两条消息,它工作正常,然后失败。您认为这是为什么?我的第一个猜测是,您的列表可能不包含您认为它包含的套接字(您可以在select()之前打印列表以确保)。我的第二个猜测是您的客户端没有发送任何数据。一个问题是您的服务器没有检查您的recv()调用是否返回无recv()将返回None,此时您应该关闭TCP套接字并将其从sockets\u列表中删除。当问题是从可读列表中删除连接时,这


我的原因是,您传递给它的第一个参数的套接字都不可读。对不起,我对select模块了解不多,但为什么套接字不可读?对于前两条消息,它工作正常,然后失败。您认为这是为什么?我的第一个猜测是,您的列表可能不包含您认为它包含的套接字(您可以在select()之前打印列表以确保)。我的第二个猜测是您的客户端没有发送任何数据。一个问题是您的服务器没有检查您的
recv()
调用是否返回无<当TCP连接关闭时,code>recv()将返回None,此时您应该关闭TCP套接字并将其从
sockets\u列表中删除。当问题是从可读列表中删除连接时,这样做有什么意义。我添加了您想要的代码,它提供了相同的输出
python if not data:print(f'Connection closed with{s})s.close()sockets_list.remove(s)del clients[s]
我想关键是要有一个能正常工作的程序。如果select()返回一个空的可读套接字列表,最可能的原因是您传递给它的第一个参数的套接字都不可读。对不起,我不太了解select模块,但为什么套接字不可读?对于前两条消息,它工作正常,然后失败。您认为这是为什么?我的第一个猜测是,您的列表可能不包含您认为它包含的套接字(您可以在select()之前打印列表以确保)。我的第二个猜测是你的客户没有发送任何数据。