我刚刚开始使用PIL,StringIO和Pygame,因此我在获取想要的结果时遇到了一些麻烦。 我尝试制作一个屏幕共享软件,为了实现这一点,我需要能够将图像从一台计算机发送到另一台计算机并使用Pygame在那里显示。 这是服务器:
#region - - - - - - I M P O R T S - - - - - -
import socket
import select
from PIL import ImageGrab
from PIL import Image
from cStringIO import StringIO
import base64
#endregion
#region - - - - - - C O N S T A N T S - - - - - -
PORT = 8820
CONCURRENT_USERS = 5
#endregion
server_socket = socket.socket()
server_socket.bind(('', PORT))
server_socket.listen(CONCURRENT_USERS)
clients_list = []
while True:
read, write, error = select.select([server_socket] + clients_list, [], [], 0)
for i in read:
if i is server_socket:
client_socket, client_address = server_socket.accept()
clients_list.append(client_socket)
for i in clients_list:
img = ImageGrab.grab()
img_str = StringIO()
img.save(img_str, "JPEG")
try:
i.send(base64.b64encode(img_str.getvalue()))
except socket.error:
clients_list.remove(i)
i.close()
还有客户:
import socket
import pygame
import sys
from PIL import Image
from StringIO import StringIO
import base64
IP = '127.0.0.1'
PORT = 8820
client_socket = socket.socket()
client_socket.connect((IP, PORT))
WIDTH = 720
HEIGHT = 480
pygame.init()
size = WIDTH, HEIGHT
screen = pygame.display.set_mode(size)
count = 0
while True:
count += 1
for e in pygame.event.get():
if e.type == pygame.QUIT:
sys.exit()
str_img = ''
chunk = client_socket.recv(1024)
while chunk:
str_img += chunk
chunk = client_socket.recv(1024)
str_img = base64.b64decode(str_img)
img = Image.open(str_img)
screen.blit(img, (0, 0))
screen.display.flip()
Pygame窗口没有显示任何图像,几秒钟后它也会崩溃。 我在使用StringIO之前尝试了几种方法(我尝试过使用Pickle和一些Image方法)但没有任何方法可以帮助我。 谁能发现这个问题?非常感谢你提前!