客户端与服务器断开连接时,如何从“ try:”块中的函数内部引发异常?

埃里克·帕克

我试图用python套接字建立一个简单的服务器-客户端聊天室。

我有以下代码:

def handle_connection(client):
    while(1):
        try:
            message = receive_message()
            broadcast(message["data"])
        except:     # for now i don't mind which exception
              print("client disconnected")


def receive_message(client_socket):
    try:
        message_header = client_socket.recv(HEADER)
        if len(message_header) == 0:
            return False
        message_length = int(message_header.decode("utf-8"))

        message = client_socket.recv(message_length).decode("utf-8")
        return {"header": message_header, "data": message}

    except:  # most likely will trigger when a client disconnects
        return False

当没有消息或一切正常时在其中receive_message()调用client.recv(HEADER)并返回False{"header": msg_header, "data": msg}

我的问题是:如果由于客户端CLI关闭而导致client.recv()内部失败receive_message(),它将引发异常并打印"client disconnected"吗?

我确实提出了以下我认为可行的解决方案:

我定义了一个函数handle_disconnection()来处理except上面代码中的所有内容

def handle_connection(client_socket):
    while 1:
        try:
            message = receive_message()
            if not message:
                handle_disconnection(client_socket)
                break
            broadcast(message["data"])

        except:     # client disconnected
            handle_disconnection(client_socket)
            break

这是解决问题的有效和/或正确的编程方法吗?如果这种方法是错误的,我该如何正确处理?

卢卡斯·普卡拉(Lukasz Puchala)

如果client.recv()会引发异常,您将在内部处理该异常,receive_message()并且handle_connection()不会收到该异常。

我建议您确定要使用异常或if-else控制流的情况。我认为receive_message()应该ConnectionError在存在连接问题时返回message的值或引发如果套接字没有消息,则可以返回None或引发NoMessagesAvailableError

还有一条规则告诉您应捕获指定的异常,而不是所有异常。client disconnected内存不足时,将打印代码

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Indy:服务器与客户端之间的连接异常断开时的处理

来自分类Dev

如何编写一个函数,以在C中断开客户端与服务器的连接?

来自分类Dev

如何在 Java 中为断开连接的客户端杀死服务器中的线程

来自分类Dev

检查PHP套接字服务器中的断开连接客户端

来自分类Dev

Java在客户端中检测到与服务器的断开连接

来自分类Dev

客户端断开连接后处理服务器应用程序中的线程

来自分类Dev

检查PHP套接字服务器中的断开连接客户端

来自分类Dev

如何在OpenVPN中与服务器端共享客户端Internet连接?

来自分类Dev

客户端与服务器的连接上的函数调用

来自分类Dev

连接到服务器时hazelcast客户端异常

来自分类Dev

连接到服务器时出现hazelcast客户端异常

来自分类Dev

将Android客户端连接到NodeJS中的套接字服务器时出错

来自分类Dev

在Meteor中,如何在服务器端完成操作时在客户端知道?

来自分类Dev

如何了解客户端是否在C#中连接到服务器?

来自分类Dev

如何在python中建立双向加密的服务器-客户端连接?

来自分类Dev

如何从Qt中的服务器向连接的客户端发送消息

来自分类Dev

如何在CPP中处理连接到服务器的多个客户端?

来自分类Dev

服务器如何与 RAFT 中的客户端通信?

来自分类Dev

服务器连接,允许客户端指定文件服务器并显示在JTextArea中

来自分类Dev

服务器如何在服务器/客户端拓扑中检测客户端电源关闭

来自分类Dev

如何在ZMQ套接字中启动/退出时清除缓冲区?(以防止服务器与死客户端连接)

来自分类Dev

如何在UDP无连接客户端中的固定端口上运行客户端程序-Java中的服务器对

来自分类Dev

两个客户端无法在套接字客户端-服务器连接中互相交谈

来自分类Dev

如何在客户端中存储Web服务器的多个服务器地址?

来自分类Dev

服务器中的accept()函数似乎不接受来自客户端的新连接

来自分类Dev

服务器中的accept()函数似乎不接受来自客户端的新连接

来自分类Dev

如何获取连接到本地网络中的NFS服务器的客户端列表?

来自分类Dev

如何将.NET Framework中的gRPC客户端与安全的.NET Core服务器连接?

来自分类Dev

如何在Mac OS(客户端)和服务器(ubuntu)上设置ssh以从丢失的临时连接中恢复

Related 相关文章

  1. 1

    Indy:服务器与客户端之间的连接异常断开时的处理

  2. 2

    如何编写一个函数,以在C中断开客户端与服务器的连接?

  3. 3

    如何在 Java 中为断开连接的客户端杀死服务器中的线程

  4. 4

    检查PHP套接字服务器中的断开连接客户端

  5. 5

    Java在客户端中检测到与服务器的断开连接

  6. 6

    客户端断开连接后处理服务器应用程序中的线程

  7. 7

    检查PHP套接字服务器中的断开连接客户端

  8. 8

    如何在OpenVPN中与服务器端共享客户端Internet连接?

  9. 9

    客户端与服务器的连接上的函数调用

  10. 10

    连接到服务器时hazelcast客户端异常

  11. 11

    连接到服务器时出现hazelcast客户端异常

  12. 12

    将Android客户端连接到NodeJS中的套接字服务器时出错

  13. 13

    在Meteor中,如何在服务器端完成操作时在客户端知道?

  14. 14

    如何了解客户端是否在C#中连接到服务器?

  15. 15

    如何在python中建立双向加密的服务器-客户端连接?

  16. 16

    如何从Qt中的服务器向连接的客户端发送消息

  17. 17

    如何在CPP中处理连接到服务器的多个客户端?

  18. 18

    服务器如何与 RAFT 中的客户端通信?

  19. 19

    服务器连接,允许客户端指定文件服务器并显示在JTextArea中

  20. 20

    服务器如何在服务器/客户端拓扑中检测客户端电源关闭

  21. 21

    如何在ZMQ套接字中启动/退出时清除缓冲区?(以防止服务器与死客户端连接)

  22. 22

    如何在UDP无连接客户端中的固定端口上运行客户端程序-Java中的服务器对

  23. 23

    两个客户端无法在套接字客户端-服务器连接中互相交谈

  24. 24

    如何在客户端中存储Web服务器的多个服务器地址?

  25. 25

    服务器中的accept()函数似乎不接受来自客户端的新连接

  26. 26

    服务器中的accept()函数似乎不接受来自客户端的新连接

  27. 27

    如何获取连接到本地网络中的NFS服务器的客户端列表?

  28. 28

    如何将.NET Framework中的gRPC客户端与安全的.NET Core服务器连接?

  29. 29

    如何在Mac OS(客户端)和服务器(ubuntu)上设置ssh以从丢失的临时连接中恢复

热门标签

归档