【问题标题】:Notify client when closing server via socket通过套接字关闭服务器时通知客户端
【发布时间】:2021-04-30 04:13:54
【问题描述】:

我正在创建一个套接字程序。服务器始终监听客户端请求并发送响应。当用户在 GUI 中单击按钮时,客户端将向服务器发送请求。

我的问题是当我单击服务器 GUI 中的关闭按钮时,我想通知客户端服务器已关闭。我想出了一个想法,即创建一个与客户端的新连接总是监听服务器,但我认为这是在浪费资源。

server.py

while True:
    try:
        request = client.recv(BUFSIZE).decode('utf-8')
    except ConnectionResetError:
        logging.info(str(client.getsockname()) + ' has exited')
        break
    except Exception as e:
        continue
    if request:
        try:
            request = json.loads(request)
            response = self.__handle_request(request, client).encode()
            client.send(response)

client.py

# when user client button
sock.send(request)
response = sock.recv().decode()
render(response)

【问题讨论】:

    标签: python sockets


    【解决方案1】:

    当服务器套接字关闭时,会通知客户端套接字。您的客户端的 sock.recv 调用将返回一个长度为零的数据包,这是它这样做的唯一实例。

    【讨论】:

    • 我的客户端程序仅在用户单击 GUI 上的按钮时调用函数 recv。我想在不点击任何按钮的情况下立即通知客户。
    • 如果没有人在套接字上监听,你认为客户到底怎么会听到你的“我快死了!”信息?您需要分离一个线程才能连续收听。这很容易而且不花钱。阻塞等待套接字数据的线程使用 0 个资源。
    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 2018-06-30
    • 2013-07-14
    • 2012-08-30
    • 2012-11-02
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    相关资源
    最近更新 更多