【发布时间】:2013-07-31 06:49:34
【问题描述】:
我正在尝试创建一个小程序,该程序将记录通过 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 很陌生。也欢迎我已经拥有的任何其他 cmets :)
谢谢 阿杰
【问题讨论】:
标签: python class function sockets python-3.x