Отправить изображение на сервер через сокеты - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь отправить изображение на сетвер, но что-то идет не так. Я не могу открыть полученный файл.

Сервер:

    with open("image.jpg", "wb") as fw:
        print("Receiving..")
        while True:
            data = c.recv(1024)
            image += data
            if data == b'BEGIN':
                continue
            elif data == b'ENDED':
                break
            else:
                fw.write(image)
        fw.close()
        print("Received..")
* +1005 * Клиент:
    with open('/home/pi/Desktop/image_to_send.jpg', 'rb') as fs: 
       self.soc.send(b'BEGIN')
       while True:
            data = fs.read(1024)
            self.soc.send(data)
            if not data:
                break
            self.soc.send(b'ENDED')
            fs.close()

1 Ответ

1 голос
/ 05 мая 2019

Первая ошибка: вы добавляете BEGIN и ENDED к image и сохраняете его.Кроме того, если вы добавите data к imag и запишите его в каждом цикле, то вы будете много раз сохранять одну и ту же часть изображения в файле.

with open("image.jpg", "wb") as fw:
    print("Receiving..")
    while True:
        data = c.recv(1024)
        if data == b'BEGIN':
            continue
        elif data == b'ENDED':
            break
        else:
            fw.write(data)
    fw.close()
    print("Received..")

Вторая ошибка: у вас неверные отступы в клиентеи вы запускаете send('ENDED') после первого send(data)

with open('/home/pi/Desktop/image_to_send.jpg', 'rb') as fs: 
   self.soc.send(b'BEGIN')
   while True:
        data = fs.read(1024)
        self.soc.send(data)
        if not data:
            break
   self.soc.send(b'ENDED')
   fs.close()

Я бы отправил его без BEGIN и ENDED.Когда клиент закрывает соединение, сервер должен получить ноль data или EOF - чтобы вы могли проверить if not data: на сервере и закрыть файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...