通过套接字将图像发送到服务器

时间:2019-05-04 23:49:30

标签: python image sockets

我正在尝试将图像发送给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()

1 个答案:

答案 0 :(得分:1)

第一个错误:将BEGINENDED添加到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()

我会在没有BEGINENDED的情况下发送它。当客户端关闭连接时,服务器应该收到零dataEOF-这样您就可以在服务器中检查if not data:并关闭文件。