【问题标题】:Check if a Client is Still Connected - Python Socket Programming using UDP检查客户端是否仍然连接 - 使用 UDP 的 Python 套接字编程
【发布时间】:2018-10-13 13:21:01
【问题描述】:

我目前正在使用 UDP 开发一个聊天应用程序。我如何判断客户端是否仍连接到我的服务器或仍在运行?以下是我的代码:

 for i, addr in enumerate(self.all_addresses):    
        try:               
            self.socket.sendto(str.encode(''), ('<broadcast>', int(addr[1])))


        except e:              
            del self.all_addresses[i]
            continue

self.all_addresses 包含绑定到服务器的客户端的 ip 和端口。在上面的代码中,我正在测试如果我向客户端发送空白消息并且它没有抛出错误,那么它是否意味着它仍然连接。不幸的是,代码不起作用,即使客户端不再运行,代码也不会抛出异常。请帮我解决我的问题。谢谢。

【问题讨论】:

  • afaik UPD 是一个“将消息扔进大海”,所有想要阅读它的人都将它的副本取出 - 如果您可以强制客户回复消息,您可以做某种“生命节拍” -request" ... 维护您连接的客户端列表。

标签: python python-3.x sockets udp serversocket


【解决方案1】:

UDP 没有“连接”的概念,因此您必须在应用层实现该逻辑。例如。让每个客户端每隔几秒向服务器发送一个“嗨,我还在这里”数据包。如果服务器发现(更多的)秒数过去了,而没有收到来自给定客户端的任何数据包,则服务器可以假设客户端已经离开。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-10
    • 2016-07-18
    • 2011-09-20
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    相关资源
    最近更新 更多