使用套接字进行以太网通信的最佳实践
Best practice for ethernet communication using socket
关于使用套接字与远程硬件通信时的最佳实践,我有一个相当普遍的问题:套接字应该在每条消息发送后关闭还是保持打开状态?
为了说明这个问题:我正在使用 python(和套接字)与远程硬件接口。通常,我会每 30 秒左右向设备发送一个命令,收到回复,然后等待约 30 秒。
目前我在做:
# Open socket
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.settimeout(10)
self.sock.connect((self.host_ip_address, self.port))
# Send Message
self.sock.send(my_command)
# Receive Reply
data = self.sock.recv(1024)
# Close socket
self.sock.shutdown(socket.SHUT_RDWR)
self.sock.close()
我想知道这是否可取,或者我是否应该在与设备的会话期间(比如 ~ 1 小时)让套接字保持打开状态。这会很稳固吗?
欢迎任何提示/指点谢谢!
只要您不时通过套接字交换数据,这就是可靠的。如果不是,Firewall/NAT 可以确定 TCP 连接断开并停止路由 TCP 数据包。
关于使用套接字与远程硬件通信时的最佳实践,我有一个相当普遍的问题:套接字应该在每条消息发送后关闭还是保持打开状态?
为了说明这个问题:我正在使用 python(和套接字)与远程硬件接口。通常,我会每 30 秒左右向设备发送一个命令,收到回复,然后等待约 30 秒。
目前我在做:
# Open socket
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.settimeout(10)
self.sock.connect((self.host_ip_address, self.port))
# Send Message
self.sock.send(my_command)
# Receive Reply
data = self.sock.recv(1024)
# Close socket
self.sock.shutdown(socket.SHUT_RDWR)
self.sock.close()
我想知道这是否可取,或者我是否应该在与设备的会话期间(比如 ~ 1 小时)让套接字保持打开状态。这会很稳固吗?
欢迎任何提示/指点谢谢!
只要您不时通过套接字交换数据,这就是可靠的。如果不是,Firewall/NAT 可以确定 TCP 连接断开并停止路由 TCP 数据包。