【问题标题】:how to know that clients disconnects server in socket如何知道客户端断开套接字中的服务器
【发布时间】:2017-04-03 07:34:29
【问题描述】:

我正在从事套接字编程,我必须跟踪所有加入服务器的客户端。

所以我只是将它们列一个列表:

client = []

并在客户端连接到服务器时将其附加到它。 现在,每当客户端断开连接时,我都必须从列表中删除客户端。 问题是服务器如何知道客户端是否与该服务器断开连接。

对于连接服务器,我正在使用:

s = socket.socket()
s.bind((host, port))
client = []
while True:
   c, addr = s.accept()
   client.append(addr)
s.close()

【问题讨论】:

  • 如果你使用了接受的套接字,你会在写入时得到一个错误,或者在对端关闭它的套接字时读取时读取 0 字节。
  • Ux 上,因为(普通)套接字是文件描述符,您可以使用 fcntl(fd, F_GETFD)

标签: python sockets websocket


【解决方案1】:

通常,当套接字断开连接时,如果写入它会引发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)

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 2018-02-20
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    相关资源
    最近更新 更多