我正在尝试将图像发送给setver,但是出了点问题。我无法打开收到的文件。
服务器:
with open("image.jpg", "wb") as fw:
print("Receiving..")
while True:
data = c.recv(1024)
image += data
if data == b'BEGIN':
continue
elif data == b'ENDED':
break
else:
fw.write(image)
fw.close()
print("Received..")
客户:
with open('/home/pi/Desktop/image_to_send.jpg', 'rb') as fs:
self.soc.send(b'BEGIN')
while True:
data = fs.read(1024)
self.soc.send(data)
if not data:
break
self.soc.send(b'ENDED')
fs.close()
答案 0 :(得分:1)
第一个错误:将BEGIN
和ENDED
添加到image
并保存。此外,如果您将data
添加到imag
并在每个循环中写入它,那么您会将图像的同一部分保存到文件中很多次。
with open("image.jpg", "wb") as fw:
print("Receiving..")
while True:
data = c.recv(1024)
if data == b'BEGIN':
continue
elif data == b'ENDED':
break
else:
fw.write(data)
fw.close()
print("Received..")
第二个错误:您的客户端缩进错误,并且在第一个send('ENDED')
之后运行send(data)
with open('/home/pi/Desktop/image_to_send.jpg', 'rb') as fs:
self.soc.send(b'BEGIN')
while True:
data = fs.read(1024)
self.soc.send(data)
if not data:
break
self.soc.send(b'ENDED')
fs.close()
我会在没有BEGIN
和ENDED
的情况下发送它。当客户端关闭连接时,服务器应该收到零data
或EOF
-这样您就可以在服务器中检查if not data:
并关闭文件。