Отправка изображений с использованием 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 функция вместо

Другие вопросы по тегам