Streaming continuous data over a network with python
Question: I have a device that continually outputs data and I would like to send that
data to a client on the same network as it is produced and I'm not finding a
good solution. Here is what I'm trying.

Server:

    
    
    import SocketServer
    from subprocess import Popen,PIPE
    
    class Handler(SocketServer.BaseRequestHandler):
        def handle(self):
            if not hasattr(self, 'Proc'):
                self.Proc = Popen('r.sh', stdout=PIPE)
            socket = self.request[1]
            socket.sendto(self.Proc.stdout.readline(),self.client_address)
    
    if __name__ == "__main__":                         
        HOST, PORT = "192.168.1.1", 6001
    
        server = SocketServer.UDPServer((HOST, PORT), Handler)
        server.serve_forever()
    

Client:

    
    
    import socket
    data = " ".join(sys.argv[1:])
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.sendto(data + "\n", ("192.168.1.1", 6001))
    try:
        received = sock.recv(1024)
    while True:
        print "Sent:     {}".format(data)
        print "Received: {}".format(received)
        sock.sendto('more' + "\n", ("192.168.1.1", 6001))
        received = sock.recv(1024)
    except:
        print "No more messages"
    

arg[1] for the client is a program that outputs lines of data for several
minutes that I need to process as it is created. The problem seems to be that
every time the client sends another request, a new Handler object is created,
so I loose Proc. How can I stream Proc.stdout?

Edit: The device is a Korebot2, so I have limited access to other python
libraries due to space.


Answer: Using UDP you get a new "connection" each time you send a datagram, which is
the reason you notice that a new object instance is created each time you send
something. You're probably using the wrong kind of protocol here... UDP is
used mostly for sending distinct "datagrams", or when a longer connection is
not needed. TCP is also called a "streaming" protocol, and is often used for
data that has no fixed end.

Also remember that UDP is not a reliable protocol, if used over a network it
is almost guaranteed that you will loose packets.

