Отправка изображений с использованием Python TCP-сокета
Я новичок в питоне и английском:). Я пытаюсь отправить файл изображения, используя разъемы Python, и я написал этот cosdes. он говорит, что это работает, но я получаю пустой файл или отсутствующий файл изображения. это коды, которые я написал:
сервер:
import socket
host = socket.gethostname()
port = 5000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(1)
sunucu , adres = s.accept()
print "baglanti saglandi"
def recvall(baglanti, buf):
data = ""
while len(data) < buf:
packet = baglanti.recv(buf - len(data))
if not packet:
return None
data += packet
return data
f = open("ggg.png", "w")
while True:
veri = sunucu.recv(512)
if not veri:
break
f.write(veri)
f.close()
print "resim alindi."
sunucu.close()
s.close()
и клиент:
import socket
host = socket.gethostname()
port = 5000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host , port))
f = open("ornekresim.png", "r")
while True:
veri = f.readline(512)
if not veri:
break
s.send(veri)
f.close()
print "resim gonderildi"
s.close()
1 ответ
По умолчанию функция Python open
открывает файл в текстовом режиме, что означает, что он будет обрабатывать весь ввод / вывод в виде текста, в то время как изображение явно двоичное.
Файл в текстовом режиме будет выполнять такие вещи, как перевод последовательностей новой строки (которые отличаются в разных системах). Это означает, что прочитанные вами данные будут повреждены.
Чтобы открыть файл в двоичном режиме, затем добавьте 'b'
на флаги режима, например, например
f = open("ornekresim.png", "rb") # <-- Note the 'b' in the mode
Однако, с вашим кодом это приводит к другой проблеме, а именно, что вы не можете использовать readline
больше. В любом случае это не имело особого смысла, считывая двоичные данные в виде строк, поскольку в двоичных данных нет "строк".
Вы должны использовать read
функция вместо