Python3无法正确接收图像

时间:2018-11-05 21:31:21

标签: python-3.x tcp

我对python3套接字有问题。我创建了一个接收字节列表的函数,然后使用列表中的字节创建图像。我有一个使用对称密钥算法加密字节的特定任务,但是问题是另一个。收到所有数据后,如果将break放在客户端和服务器循环中,则将毫无问题地接收到图像。但是,如果我想向服务器发送另一条消息,将图像发送给服务器后,就会出现问题。该功能似乎停止接收。我注意到,在将图像字节发送到另一端之后,如果循环没有停止,则必须接收图像的函数将无法接收任何字节。因此,它在第一个self.connection.recv(4096)中阻塞,并且不接收任何内容。请记住,我是一个初学者,这只是一个随机的任务。是的,服务器和客户端是倒置的,因此服务器向客户端询问信息(客户端必须将图像发送到服务器)。

server.py

def send_file(self, file_path):
    if os.path.exists(file_path):
        bytes = []
        with open(file_path, 'rb') as f:
            while True:
                data = base64.b64encode(f.read(1024))
                ciphertext = self.encryption.encrypt(data.decode("utf-8"))
                bytes.append(ciphertext)
                if not data:
                   break
            f.close()
        data = pickle.dumps(bytes)
        self.socket.send(data)
        print("sent")

client.py

def download_file(self, file_name, file_extension):
    bytes_received = []
    while True:
        data = self.connection.recv(4096)
        if not data:
            break
        bytes_received.append(data)
        print(bytes_received)
    try:
        data_arr = pickle.loads(b"".join(bytes_received))
    except EOFError:
        print("[-] the file does not exists")
        return
    print(data_arr)
    with open(file_path + file_name + "." + file_extension, 'wb') as f:
        for byte in data_arr:
            decrypted_bytes = base64.b64decode(self.encryption.decrypt(byte))
            f.write(decrypted_byte)
        f.close()

0 个答案:

没有答案