我对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()