在Python3中通过套接字发送文件
在下面的代码中,我尝试使用一台机器中的python套接字模块将图像发送到另一台机器。所以我有两个文件:client.py和Server.py 我发现问题在于,当我在客户端机器上读取图像(以字节为单位),然后服务器尝试接收文件时,当发送过程在接收过程之前完成时,客户端代码的第13行出现以下错误:在Python3中通过套接字发送文件,python,python-3.x,sockets,server,network-programming,Python,Python 3.x,Sockets,Server,Network Programming,在下面的代码中,我尝试使用一台机器中的python套接字模块将图像发送到另一台机器。所以我有两个文件:client.py和Server.py 我发现问题在于,当我在客户端机器上读取图像(以字节为单位),然后服务器尝试接收文件时,当发送过程在接收过程之前完成时,客户端代码的第13行出现以下错误: BrokenPipeError: [Errno 32] Broken pipe 我想知道这个错误是什么,以及为什么它会出现在我的代码中 Server.py import socket host = '
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()
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()
Client.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()
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()
您是在客户端读取“完成”之前关闭服务器连接的您是在客户端读取“完成”之前关闭服务器连接的因此,我应该做些什么来防止它呢?使用睡眠等待,或者让客户端向您发送他已完成的确认,然后关闭连接(但是客户端将不得不等待)那么,我应该怎么做来防止它呢?在睡眠状态下等待,或者让客户端向您发送确认信息,确认他已经完成了您的操作,然后关闭连接(但是客户端将不得不等待)