我正在尝试编写一个使用套接字协议与硬件通信的类。该类是相当通用的,以便我可以为我的网络上的每个继承通用通信协议类的设备编写自定义类。
我是套接字编程的新手,想知道是否有人可以提出以下代码的提示或改进?
我特别想澄清一下:
1)套接字是否仅存在于一个事务中,然后在设备返回完整消息后被销毁。因此我需要开放和关闭套接字方法。
2)我的读数是针对未知的消息长度。 pySocket文档建议在消息中添加长度指示符,尽管我正在与之通信的硬件不允许我修改它发送数据的方式。因此,我认为现在读出最大1 kbyte似乎是合理的,但如果需要我可以随后增加。
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
感谢。