我正在尝试创建一个小程序,它将通过 TCP 记录从设备输出的信息
基本上,这只是将我想要捕获的数据流出来,然后转储到数据库中以供以后处理
但是设备会重新启动,因此我需要能够在套接字关闭时重新连接而不受任何人为干扰
所以这就是我到目前为止所拥有的
import socket, time, logging, sys, smtplib # Import socket module
logging.basicConfig(filename='Tcplogger.log',level=logging.DEBUG,format='%(asctime)s : %(levelname)s : %(message)s')
logging.info('|--------------------------------------|')
logging.info('|--------------- TCP Logger Starting---|')
logging.info('|--------------------------------------|')
host = '127.0.0.01' # host or Ip address
port = 12345 # output port
retrytime = 1 # reconnect time
reconnectattemps = 10 # Number of time to try and reconnect
class TPCLogger:
def __init__(self):
logging.debug('****Trying connection****')
print('****Trying connection****')
self.initConnection()
def initConnection(self):
s = socket.socket()
try:
s.connect((host, port))
logging.debug('****Connected****')
except IOError as e:
while 1:
reconnectcount = 0;
logging.error(format(e.errno)+' : '+format(e.strerror))
while 1:
reconnectcount = reconnectcount + 1
logging.error('Retrying connection to Mitel attempt : '+str(reconnectcount))
try:
s.connect((host, port))
connected = True
logging.debug('****Connected****')
except IOError as e:
connected = False
logging.error(format(e.errno)+' : '+format(e.strerror))
if reconnectcount == reconnectattemps:
logging.error('******####### Max Reconnect attempts reached logger will Terminate ######******')
sys.exit("could Not connect")
time.sleep(retrytime)
if connected == True:
break
break
while 1:
s.recv(1034)
LOGGER= TCPLogger()
如果尝试连接并且它不存在,这一切在启动时都可以正常工作,它将重试由 reconnectattemps 设置的次数
但他是我的问题
while 1:
s.recv(1034)
当这失败时我想尝试重新连接我当然可以输入或只是再次复制我的连接部分但我想要做的是调用一个函数来处理连接并重试并将连接对象交还给我
例如像这样
class tcpclient
#set some var
host, port etc....
def initconnection:
connect to socket and retry if needed
RETURN SOCKET
def dealwithdata:
initconnection()
while 1:
try:
s.recv
do stuff here copy to db
except:
log error
initconnection()
我认为这是可能的,但我真的不明白类/方法系统在 python 中是如何工作的,所以我认为我在这里遗漏了一些东西
仅供参考,以防万一你没有注意到 iv 对 python 很陌生。也欢迎对我已有的任何其他评论:)
谢谢阿杰