Как отправить несколько файлов изображений с помощью сокетов? - PullRequest
0 голосов
/ 07 февраля 2019

Приведенный ниже код отправляет только первый файл изображения.Как отправить несколько изображений?

Код на стороне сервера:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 12345))
bind to ('', port)
s.listen(10)
c, addr = s.accept()
print('{} connected.'.format(addr))

m = c.recv(1024)
m1 = c.recv(1024)
f = open(r"C:\python voice\haha3.jpg", "wb")
f1 = open(r"C:\python voice\haha4.jpg", "wb")
data = None
data1 = None

while True:
    data = m
    data1 = m1
    if m:
        while m:
            m = c.recv(1024)
            data += m
        else:
            break
    if m1:
        while m1:
            m1 = c.recv(1024)
            data1 += m1
        else:
            break

f.write(data)
f.close()
f1.write(data1)
f1.close()

print("Done receiving")

Код на стороне клиента:

import socket
import os

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1",12345))
f = open(r"C:\python voice\image.jpg", "rb")
l = os.path.getsize(r"C:\python voice\image.jpg")
m = f.read(l)
s.send(m)
f.close()
print("Done sending...")

f1 = open(r"C:\python voice\image1.jpg", "rb")
l1 = os.path.getsize(r"C:\python voice\image1.jpg")
m1 = f1.read(l1)
s.send(m1)
f1.close()
print("Done sending...")

1 Ответ

0 голосов
/ 07 февраля 2019

Вы используете простой протокол TCP.

Это транспортный протокол.Он имеет дело с общими потоками байтов.

Вы должны использовать или изобрести протокол приложения, который знает, что такое файлы.

Пример: перед отправкой файла отправьте заголовок, описывающий, сколько файлов последуети их размеры в байтах.С этой информацией вы можете восстановить файлы из потока

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