Send a multidimensional numpy array over a socket

前端 未结 3 1688
萌比男神i
萌比男神i 2021-02-13 21:23

Good day,

I\'ve searched for this but haven\'t come up with any responses. I wish to send a multi dimensional numpy array over a socket. Hence, I decided to convert it t

3条回答
  •  执念已碎
    2021-02-13 21:42

    Try this example:-

    import socket
    import numpy as np
    from cStringIO import StringIO
    
    class numpysocket():
        def __init__(self):
            pass
    
        @staticmethod
        def startServer():
            port=7555
            server_socket=socket.socket() 
            server_socket.bind(('',port))
            server_socket.listen(1)
            print 'waiting for a connection...'
            client_connection,client_address=server_socket.accept()
            print 'connected to ',client_address[0]
            ultimate_buffer=''
            while True:
                receiving_buffer = client_connection.recv(1024)
                if not receiving_buffer: break
                ultimate_buffer+= receiving_buffer
                print '-',
            final_image=np.load(StringIO(ultimate_buffer))['frame']
            client_connection.close()
            server_socket.close()
            print '\nframe received'
            return final_image
    
        @staticmethod
        def startClient(server_address,image):
            if not isinstance(image,np.ndarray):
                print 'not a valid numpy image'
                return
            client_socket=socket.socket()
            port=7555
            try:
                client_socket.connect((server_address, port))
                print 'Connected to %s on port %s' % (server_address, port)
            except socket.error,e:
                print 'Connection to %s on port %s failed: %s' % (server_address, port, e)
                return
            f = StringIO()
            np.savez_compressed(f,frame=image)
            f.seek(0)
            out = f.read()
            client_socket.sendall(out)
            client_socket.shutdown(1)
            client_socket.close()
            print 'image sent'
            pass
    

    In this model client sends multidimensional ndarray to server. There are two functions startServer() and startClient(). startServer takes no arguments but startClient needs server address as well as the ndarray as arguments. First start Server and then start client. Server starts reading from buffer only after receiving the shutdown message from client.

提交回复
热议问题