Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以太网设备与套接字通信。这个普通班行吗?_Python_Sockets_Serversocket_Ethernet - Fatal编程技术网

Python 以太网设备与套接字通信。这个普通班行吗?

Python 以太网设备与套接字通信。这个普通班行吗?,python,sockets,serversocket,ethernet,Python,Sockets,Serversocket,Ethernet,我正在尝试编写一个类,用于使用套接字协议与硬件通信。该类相当通用,因此我可以为网络上继承通用通信协议类的每个设备编写自定义类 我是套接字编程新手,不知道是否有人可以建议对以下代码进行提示或改进 我特别想澄清: 1) 套接字只存在于一个事务中,然后在设备返回完整消息后被销毁,这是真的吗。因此,我需要打开和关闭套接字方法 2) 我的读数是未知的信息长度。pySocket文档建议在消息中添加一个长度指示器,尽管我正在使用的硬件不允许我修改它发送数据的方式。因此,我认为目前读取最大1KB的数据似乎是合理

我正在尝试编写一个类,用于使用套接字协议与硬件通信。该类相当通用,因此我可以为网络上继承通用通信协议类的每个设备编写自定义类

我是套接字编程新手,不知道是否有人可以建议对以下代码进行提示或改进

我特别想澄清:

1) 套接字只存在于一个事务中,然后在设备返回完整消息后被销毁,这是真的吗。因此,我需要打开和关闭套接字方法

2) 我的读数是未知的信息长度。pySocket文档建议在消息中添加一个长度指示器,尽管我正在使用的硬件不允许我修改它发送数据的方式。因此,我认为目前读取最大1KB的数据似乎是合理的,但如果需要,我可以在以后增加

class SocketTalker(object):
    def __init__(self, ip, port, timeout=3):
        self.ip = ip
        self.port = port
        self.timeout = timeout

        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock.settimeout(self.timeout)

    def open_socket(self):
        self.sock.connect((self.ip, self.port))

    def close_socket(self):
        self.sock.shutdown()
        self.sock.close()

    def query(self, command):
        self.open_socket()
        self.sock.send(command)
        data = self.sock.recv(1024) # Wait for up to 1 kbyte of data to be returned (if fewer bytes returned and the instrument signals message complete, the socket terminates and this data is returned)
        self.close_socket() # Double check the socket is closed after use
    return data
谢谢