我有一个numpy数组。在我的代码中,我想通过套接字发送numpy ndarray,并且已经实现了。当我在PC上托管的客户端和服务器套接字之间使用它时,它可以正常运行,尽管当尝试将ndarray作为客户端发送到另一台PC上的服务器时,它不起作用并显示“超时”-套接字错误。
我认为我所做的一切都正确。 这是我构建代码的方式:
客户端发送第一条消息以建立连接。
服务器发回邮件,表明已准备好接收数据。
客户端发送numpy ndarray作为字节以及消息 “ transmission_over”。
服务器发回已接收到的数据。
# 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数组。
那为什么只有当客户端和服务器使用同一台计算机时,此代码才起作用?如何解决此问题?
谢谢!
答案 0 :(得分:0)
抽象地进行压缩,您必须在路由器中启用端口转发并相应地配置系统的iptables,如果两种操作系统的类型,它们所连接的网络, (如果连接到相同或不同的路由器/网络)