发送带TCP连接的PNG文件

时间:2015-10-16 18:58:58

标签: python sockets networking tcp

我正在尝试将png图像(屏幕截图)从服务器发送到客户端。

我解码它并将解码后的字符串发送到客户端,客户端使用它将图像保存到他的计算机中。

但是我从客户那里获得的图像并不完美......

客户端

while "finish" not in data:
        data += receive(data_len)
    data = data[:-7]

fh = open("imageToSave.png", "wb")
fh.write(data.decode('base64'))
fh.close()

SERVER

ImageGrab.grab().save("screen_capture.png", "PNG")
            #Convert the image to a string that it will be able to be send to the client
            with open("screen_capture.png", "rb") as imageFile:
                Image_Str = base64.b64encode(imageFile.read())
            fh = open("text", "wb")
            fh.write(Image_Str)
            fh.close
            fh = open("text", "rb")
            str1 = fh.read(150)
            client_socket.send("150~" + str1)
            while str1:
                str1 = fh.read(150)
                client_socket.send(str1)
            client_socket.send("6finish")

我试图检查字符串是否相同 - 看起来它们是...... 当我尝试将字符串解码回服务器中的图像时 - 它可以工作......

1 个答案:

答案 0 :(得分:4)

您需要使用client_socket.sendall(strl)代替send

通过套接字发送数据时,操作系统会告诉您已接受通过网络发送的数量,但可能会少于您提出的数量。

sendall是套接字的python方法,可以为您执行所需的循环。