Добрый день всем
Я пытаюсь отправить файл с использованием сокетов в python3, однако при попытке отправить файл получаю небольшую ошибку:
на стороне клиента:
Line 18
while current_size < size
TypeError '<' not supported between instances of 'int' and 'bytes'
В то время как на стороне сервера соединение заканчивается
Попробуйте преобразовать байты размером int (size)
в целые числа, но это не сработало
Надеюсь, выможете мне помочь
server.py
import socket
import os
servidor = socket.socket()
conexion = (socket.gethostname(),900)
servidor.bind(conexion)
servidor.listen(1)
cliente,direccion = servidor.accept()
longitud = os.path.getsize("imagen.jpg")
while True:
datos = cliente.recv(1024).decode()
mensaje = input("> ")
cliente.sendall(mensaje.encode())
if datos == "exit":
cliente.sendall("exit".encode())
break
elif datos == "archivo":
cliente.send(bytes(longitud))
with open("imagen.jpg","rb") as file:
d = file.read(1024)
while d:
cliente.send(d)
d = file.read(1024)
servidor.close()
client.py
import socket
conexion = ("Pc-1",900)
cliente = socket.socket()
cliente.connect(conexion)
while True:
msg = input("> ")
cliente.sendall(msg.encode())
respuesta = cliente.recv(1024)
print(respuesta.decode())
if msg == "archivo":
size = cliente.recv(1024)
size = bytes(size)
current_size = 0
bufer = b""
while current_size < size:
data = cliente.recv(1024)
if not data:
break
if len(data) + current_size<size:
data = data[:size-current_size]
bufer += data
current_size += len(data)
with open("recibido.jpg","wb") as file:
file.write(bufer)
ОБНОВЛЕНИЕ
@ MarkTolonen, Выможет быть немного более явным с порядком байтов little-endian и big-endian.По поводу второй части вашего ответа.Я понял, что сервер ожидает длину, например, 1 байт, которая может быть длиной отправляемого файла, например: File = 1024bytes LongFile = 4 <- это число отправлено, и онос добавочным номером </p>
Затем сервер теперь ждет добавочный номер 4, например, 1024.Таким образом, информация, полученная сервером, будет ограничена.Это правильно?