通过套接字将numpy数组发送到另一台计算机时,套接字连接超时

时间:2018-12-24 13:19:48

标签: python python-3.x numpy sockets

我有一个numpy数组。在我的代码中,我想通过套接字发送numpy ndarray,并且已经实现了。当我在PC上托管的客户端和服务器套接字之间使用它时,它可以正常运行,尽管当尝试将ndarray作为客户端发送到另一台PC上的服务器时,它不起作用并显示“超时”-套接字错误。

我认为我所做的一切都正确。 这是我构建代码的方式:

  1. 客户端发送第一条消息以建立连接。

  2. 服务器发回邮件,表明已准备好接收数据。

  3. 客户端发送numpy ndarray作为字节以及消息 “ transmission_over”。

  4. 服务器发回已接收到的数据。

    # Client side:
    client_socket.send(data_to_send.encode()) -> Some headers.
    received_data = client_socket.recv(1024) -> Receive data from server.
    print('What I received after sending headers (1): ', received_data.decode())
    client_socket.send(data.tobytes()) -> Sending the ndarray as bytes.
    client_socket.send("transmission_over".encode())
    received_data = client_socket.recv(1024) -> Receive data from server.
    print('What I received after sending the data (2): ', received_data.decode())
    print('sent data!')
    
    # Server side:
    def receive_numpy_array(connection):
        received_bytes = ''.encode()
        while True:
          raw_data = connection.recv(1024)
          if raw_data == 'transmission_over'.encode():
              break
          received_bytes += raw_data
        np_array_from_bytes = np.frombuffer(received_bytes, dtype=np.uint64).reshape((8192,))
        return np_array_from_bytes
    
    raw_data = connection.recv(1024) -> Receive headers.
    connection.send("HOST >>> YOU: Ready to receive data!".encode()) -> Sending back that server is ready.
    np_array = receive_numpy_array(connection) -> Receiving & constructing ndarray.
    connection.send("HOST >>> YOU: Received your data segment!".encode()) -> Sending back confirmation.
    

当客户端位于一台PC上且服务器位于另一台PC上时尝试此代码时,该代码不起作用,并显示套接字在receive_numpy_array函数内部超时的错误。

在我自己的PC上同时进行客户端和服务器测试时,它可以正常工作,并且我成功检索了numpy数组。

那为什么只有当客户端和服务器使用同一台计算机时,此代码才起作用?如何解决此问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

抽象地进行压缩,您必须在路由器中启用端口转发并相应地配置系统的iptables,如果两种操作系统的类型,它们所连接的网络, (如果连接到相同或不同的路由器/网络)