I created one program with pygame, imageGrab and sockets but it doesn't work. It should take a printscreen of the server with ImageGrab, convert it to a string, and send it to the client. However, the client upon receiving the information and converting it to an image raises an error:
image = pygame.image.frombuffer(img, (800,600), "RGB") ValueError: Buffer length does not equal format and resolution size code Server
import sys, os, socket, pygame from PIL import ImageGrab from pygame.locals import * print "streaming sever 0.1" try: socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error: print "Error creating socket" sys.exit(1) host = "127.0.0.1" port = raw_input("Port:") socket.bind((host, int(port))) socket.listen(2) socket2,client = socket.accept() print "Client conectado: " + str(client[0]) + "\nPorta usada: " + str(client[1]) #Capture and send while True: img=ImageGrab.grab().resize((800,600)) img.tostring() socket2.sendall(img) socket2.close() code Client
import sys, os, socket, pygame from PIL import ImageGrab from pygame.locals import * print "streaming client 0.1" pygame.init() try: s_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) print "streaming protocol started" except socket.error: print "Error creating socket" sys.exit(1) host = "127.0.0.1" porta = raw_input("Port:") q_bytes = raw_input("Enter the number of MBs to transfer: ") t_bytes = 1024*1024*int(q_bytes) try: s_client.connect((host,int(porta))) except socket.error: print "Error connecting to: " + host sys.exit(1) print "Conectado!" size = width, height = 800, 600 screen = pygame.display.set_mode(size) num = 0 while True: img = s_client.recv(t_bytes) image = pygame.image.frombuffer(img, (800,600), "RGB") screen.blit(image,(0,0)) pygame.display.flip() for event in pygame.event.get(): if event.type == QUIT: pygame.quit() os._exit(1) #recebimento s_client.close()