отправка файла через сокет в Python 3 - PullRequest
0 голосов
/ 21 марта 2019

В приведенном ниже коде я попытался отправить изображение с помощью модуля сокета python на одном компьютере на другой.Итак, у меня есть 2 файла: client.py и Server.py

, так как я понял это, проблема в том, что когда я читаю изображение (в байтах) на клиентском компьютере, а затем сервер пытается получить файл,в тот момент, когда процесс отправки выполняется до процесса получения, в строке 13 клиентского кода возникает следующая ошибка:

BrokenPipeError: [Errno 32] Broken pipe

Я хочу выяснить, что это за ошибка и почему она возникает в моемкод.

Server.py

import socket

host = '192.168.1.35'
port = 5000

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(1)

while True:
    conn , addr = s.accept()
    data = conn.recv(1024)

    with open(r"C:\Users\master\Desktop\music.jpg",'wb') as f:
        f.write(data)
        # conn.send(b'done')
        data = conn.recv(1024)
        if not data:
            break
            conn.send(b'done')
    conn.send(b'done')
    conn.close()
s.close()

Client.py

import socket

def main():

    HOST = '192.168.1.35'  
    PORT = 5000

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    f = open('/home/taha/Desktop/f.jpg','rb')
    data = f.read()
    s.sendfile(f)
    if s.recv(1024) == b'done':
        f.close()

    s.close()

if __name__ == '__main__':
    main()

1 Ответ

1 голос
/ 21 марта 2019

Вы закрываете соединение с сервером до того, как клиент прочитает «готово»

...