我正在尝试通过套接字从客户端向服务器发送图像(屏幕截图)。在Python 2中,我能够使用read()
和write()
函数来读取和写入二进制数据以及StringIO
。但是所有这些都在Python 3中消失了。我正在玩PIL
,但我无法让测试程序运行。
客户端
image = ImageGrab.grab()
s.send(image.tobytes())
我使用GrabImage
创建了一个屏幕截图,并将其保存为image
。之后,我将图像作为二进制文件通过套接字发送到服务器。
服务器
data = conn.recv(4194304)
img = Image.frombytes('RGB', (1366, 768), data)
img.save('screenshot.jpg')
但是,如果我运行脚本,我会收到一条错误消息:
ValueError: not enough image data
我想我缺少决定性的东西,但我无法弄明白。
谢谢你,chrizator。
答案 0 :(得分:4)
在检索所有数据之前,.recv()
的调用可能会返回;参数是最大尺寸,而不是确切尺寸。您需要在循环中调用.recv()
并附加数据,直到收到整个图像。这意味着您需要一些方法来了解收到整个数据的时间 - 通常的策略是: