Python 接收带有套接字的大型pickle对象时的无限循环

Python 接收带有套接字的大型pickle对象时的无限循环,python,sockets,server,client,client-server,Python,Sockets,Server,Client,Client Server,我使用的是一个远程linux服务器,我想用python从客户端通过套接字发送一个数组,所以我使用了以下代码: message = pickle.dumps(faceBlob) message_header = bytes(f"{len(message):<{HEADER_LENGTH}}", "utf-8") client_socket.send(message_header + message) 服务器仍在打印“我已到达此处”,但会收到消息,直到

我使用的是一个远程linux服务器,我想用python从客户端通过套接字发送一个数组,所以我使用了以下代码:

message = pickle.dumps(faceBlob)
message_header = bytes(f"{len(message):<{HEADER_LENGTH}}", "utf-8")
client_socket.send(message_header + message)

服务器仍在打印“我已到达此处”,但会收到消息,直到客户端的连接结束。

您的循环将继续,直到客户端关闭连接。如果他们在收到你的回复之前不关闭,你就陷入了僵局

因为您知道消息的长度,所以可以在收到那么多字节时停止循环

    received_length = 0
    while received_len < message_length:

        print("I arrived her")
        chunk = client_socket.recv(message_length - received_length)
        if not chunk:
            break
        fragments.append(chunk)
        received_length += len(chunk)
received_长度=0
接收时长度<消息长度:
打印(“我到达了她”)
chunk=client\u socket.recv(消息长度-接收长度)
如果不是块:
打破
fragments.append(块)
接收长度+=len(块)

您的循环将继续,直到客户端关闭连接。如果他们在收到你的回复之前不关闭,你就陷入了僵局

因为您知道消息的长度,所以可以在收到那么多字节时停止循环

    received_length = 0
    while received_len < message_length:

        print("I arrived her")
        chunk = client_socket.recv(message_length - received_length)
        if not chunk:
            break
        fragments.append(chunk)
        received_length += len(chunk)
received_长度=0
接收时长度<消息长度:
打印(“我到达了她”)
chunk=client\u socket.recv(消息长度-接收长度)
如果不是块:
打破
fragments.append(块)
接收长度+=len(块)

很有效,非常感谢♥很有效谢谢你♥