Как в эхо сервер, который пересылает текст добавить пересылку файлов и картинок?
Написал простой эхо сервер и клиент
Сервер:
import socket
import logging
import threading
HEADER = 1024
HOST = 'localhost'
PORT = 5005
ADDR = (HOST, PORT)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(ADDR)
def handle_client(conn, addr):
print(f'[NEW CONNECTION] {addr}')
connected = True
while connected:
data = conn.recv(HEADER)
if not data:
break
conn.sendall(data)
def start():
server.listen(1)
while True:
conn, addr = server.accept()
thread = threading.Thread(target=handle_client, args=(conn, addr))
thread.start()
print(f'[ACTIVE CONNECTRED] {threading.activeCount() -1 }')
start()
Клиент:
import socket
HOST = 'localhost'
PORT = 5005
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
print('Client connected.')
while True:
user_input = str(input())
if not user_input:
break
s.sendall(user_input.encode())
data = s.recv(1024)
if not data:
break
print("Data received")
Как сделать так, что бы можно было принимать (до этого отправлять их с клиента) кроме текста еще файлы и картинки и отправлять их обратно на клиент? Ведь нас на сторону сервера поступают байты. Как определить что это именно файл, а не текст, когда ему приходят байты. Помогите с написанием кода.
Ответы (1 шт):
Автор решения: Mango
→ Ссылка
я когда передавал изображение я его переделывал в байты
import os, base64, io, PIL
user_input = str(input())
if user_input.startswith('C:\\'): #если user_input это какой то путь
if os.path.isfile(user_input): #если user_input это действительная картинка
data = base64.b64encode(open(user_input, 'rb').read()) #картинка в байты
s.sendall(bytes(data))
из байтов в картинку
Image.open(io.BytesIO(base64.b64decode(server.recv(4096).decode()))).save('ваш путь для сохранения')