我正在进行套接字编程,我必须跟踪加入服务器的所有客户端。
所以我只是保留一份清单:
client = []
并在客户端连接到服务器时将其附加到客户端。 现在,每当客户端断开连接时,我都必须从列表中删除客户端。 问题是服务器如何知道客户端是否与该服务器断开连接。
对于连接服务器,我正在使用:
s = socket.socket()
s.bind((host, port))
client = []
while True:
c, addr = s.accept()
client.append(addr)
s.close()
答案 0 :(得分:0)
通常,当套接字断开连接时,如果写入,它会引发socket.error
,并在读取时返回b""
。
所以你可以做的是,你可以捕获该异常并在写入时删除客户端,并在读取时检查数据是否为空。
顺便说一句,您需要将套接字用作客户端,而不是其地址。
像这样:
try:
sock.send(data)
except socket.error:
client.remove(sock)
data = sock.receive(1024)
if not data:
sock.close()
client.remove(sock)