【问题标题】:sending file through socket in python 3在python 3中通过套接字发送文件
【发布时间】:2019-08-12 19:06:54
【问题描述】:

在下面的代码中,我尝试使用一台机器中的 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()

【问题讨论】:

    标签: python python-3.x sockets server network-programming


    【解决方案1】:

    您在客户端读取“完成”之前关闭服务器连接

    【讨论】:

    • 那我应该怎么做才能预防呢??
    • 等待睡眠或让客户端向您发送确认他已完成您的操作,然后关闭连接(但随后客户端将不得不等待)
    猜你喜欢
    • 2012-03-12
    • 2015-08-28
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多