Как избежать ошибки сломанной трубы - PullRequest
0 голосов
/ 07 мая 2018

Я использую сокеты Python для подключения более 50 клиентов к серверу для передачи изображений.Я использую беспроводную сеть для их подключения.Одна проблема, с которой я столкнулся, заключается в том, что, если какое-то время нет связи, скажем, 10 минут, программное обеспечение прерывается.В противном случае он работает нормально.

Вот метод отправки на стороне клиента:

f = open(fullpath, "rb")
filesize = str(os.path.getsize(fullpath))
s.send(filesize.encode('utf-8'))
while True:
    data = f.read(512)
    if not data:
        break
    s.send(data)
f.close() 
print("Finished sending image to server")
output("Finished sending image to server")

А вот метод получения на стороне сервера:

client[0].send(str.encode("start"))
data = client[0].recv(1024).decode('utf-8')
filesize = int(data)
f = open(filenames[count], "wb")
currentSize = 0
while currentSize < filesize:
    data = client[0].recv(512)
    if not data:
       break
    if len(data) + currentSize > filesize:
       data = data[:filesize-currentSize]
    f.write(data)
    currentSize += len(data)
f.close()

Вкл.на стороне клиента я получаю сообщение об ошибке: [Errno 32] Broken pipe.На стороне сервера я получаю сообщение об ошибке: кодек utf-8 не может декодировать байт 0xff в позиции 0: недопустимый начальный байт.Ошибка происходит, когда клиент отправляет размер файла.

Есть ли ошибка в моем коде?Могу ли я, чтобы сервер и клиенты постоянно отправляли туда и обратно строки, чтобы поддерживать соединение?

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