У меня проблема с сокетами 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()