using pygame to stream over sockets in python error
Question: i am working on with a webcam script i got of the internet in python and i am
using pygame module the code is

    
    
    import socket
    
    import pygame
    
    import sys
    
    
    port=5014
    
    
    #create pygame screen
    
    screen = pygame.display.set_mode((800,600),0)
    
    
    while True:
    
    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    s.bind(("",port)) # server is available on the whole network by setting host to ""
    
    s.listen(1)
    
    connection, addr = s.accept()
    
    received = []
    
    
    # loop .recv, it returns empty string when done, then transmitted data is completely received
    
    while True:
    
        recvd_data = connection.recv(1440021)
    
        if not recvd_data:
    
            break
    
        else:
    
            received.append(recvd_data)
    
    
    
    dataset = ''.join(received)
    
    image = pygame.image.fromstring(dataset,(800,600),"RGB") # convert received image from string
    
    #image = pygame.transform.scale(image,(800,600)) # scale image to 800*600
    
    screen.blit(image,(0,0)) # "show image" on the screen
    
    pygame.display.update()
    
    
    # check for quit events
    
    for event in pygame.event.get():
    
        if event.type == pygame.QUIT:
    
            pygame.quit()
    
            sys.exit()
    

and the client code is

    
    
        import socket
    
        import pygame
    
        import pygame.camera
    
        import sys
    
        import time
    
    
    
    
       host = "localhost"
    
       port = 5014
    
    
    
       pygame.init()
    
       pygame.camera.init()
    
    
        cam_list = pygame.camera.list_cameras() # list available cameras
    
        webcam = pygame.camera.Camera(cam_list[0],(800,600)) # use first camera in list and set resolution
    
        webcam.start() # start camera
    
    
        while True:
    
        image = webcam.get_image() # capture image
    
        data = pygame.image.tostring(image,"RGB") # convert captured image to string, use RGB color scheme
    
        #print sys.getsizeof(data) # in case somebody wants to know the size of the captured   image
    
    
        # prepare for connection to server
    
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # TCP is used
    
        s.connect((host, port))
    
        s.sendall(data)
    
        s.close()
    
        time.sleep(0.1)
    

the error i get on the server is

    
    
        Traceback (most recent call last):
      File "/root/Desktop/serv.py", line 29, in <module>
        image = pygame.image.fromstring(dataset,(800,600),"RGB") # convert received image from string
    ValueError: String length does not equal format and resolution size
    

and the error i get on the client is

    
    
    Traceback (most recent call last):
      File "/root/Desktop/cli.py", line 28, in <module>
        s.sendall(data)
      File "/usr/lib/python2.7/socket.py", line 224, in meth
        return getattr(self._sock,name)(*args)
    socket.error: [Errno 104] Connection reset by peer
    

does anyone know what could be wrong


Answer: I was using the same code and getting a similar error, the solution was to
lower the resolution of the webcam because mine could not handle the 800x600.

I also changed the "server" and "client" so the weebcam server acts like the
"socket server"

try the following code, make sure that your video is correct, on my example
"/dev/video0" yours could be different. Start the webcam server first.

Webcam server:

    
    
    import socket
    import pygame
    import pygame.camera
    import sys
    import time
    
    port = 5000
    pygame.init()
    
    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serversocket.bind(("",port))
    serversocket.listen(1)
    
    pygame.camera.init()
    webcam = pygame.camera.Camera("/dev/video0",(320,240))
    webcam.start()
    
    while True:
            connection, address = serversocket.accept()
            image = webcam.get_image() # capture image
            data = pygame.image.tostring(image,"RGB") # convert captured image to string, use RGB color scheme
            connection.sendall(data)
            time.sleep(0.1)
            connection.close()
    

Client server:

    
    
    import socket
    import pygame
    import sys
    
    host = "10.0.0.13"
    port=5000
    screen = pygame.display.set_mode((320,240),0)
    
    
    while True:
        clientsocket=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        clientsocket.connect((host, port))
        received = []
        # loop .recv, it returns empty string when done, then transmitted data is completely received
        while True:
            #print("esperando receber dado")
            recvd_data = clientsocket.recv(230400)
            if not recvd_data:
                break
            else:
                received.append(recvd_data)
    
        dataset = ''.join(received)
        image = pygame.image.fromstring(dataset,(320,240),"RGB") # convert received image from string
        screen.blit(image,(0,0)) # "show image" on the screen
        pygame.display.update()
    
        # check for quit events
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
    

