使用套接字进行以太网通信的最佳实践

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 数据包。