Вечера. Итак, я поинтересовался сокетами в питоне. Захотел отправить картинку.
Посмотрел код в интернете - не подходит. Попытался написать сам на основе того, что уже увидел.
server
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("", 9999))
data, addr = sock.recvfrom(1024)
print(data.decode(), addr)
with open("mi.png", "rb") as mifile:
midata = mifile.read(1024)
while midata:
sock.sendto(midata, addr)
midata = mifile.read(1024)
print("Done.")
sock.close()
client
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.connect(("localhost", 9999))
sock.send("Hello, Server!".encode())
with open("mi2.png", "ab") as mifile:
data = sock.recv(1024)
while data:
mifile.write(data)
data = sock.recv(1024)
print("Done.")
sock.close()
Первое сообщение со стороны клиента отсылается, сервер завершает свою работу, но данные не записываются. Первым моим решением было:
server
with open("mi.png", "rb") as mifile:
midata = mifile.read()
while midata:
sock.sendto(midata, addr)
client
with open("mi2.png", "wb") as mifile:
mifile.write(sock.recv(1024))
В таком случае файл сохранялся, но был повреждён
(Сохранялся вес оригинального файла, но места на диске занимал 0). Во втором же случае не записывается вообще ничего
(0 что там, что там.).
Как можно решить?