def run(self): SOCK_CLOSE_STATE = 1 SOCK_OPENTRY_STATE = 2 SOCK_OPEN_STATE = 3 SOCK_CONNECTTRY_STATE = 4 SOCK_CONNECT_STATE = 5 idle_state = 1 datasent_state = 2 sys.stdout.write('thread for %r ' % self.serverip) sys.stdout.write('is starting\r\n') # TCPClient instance creation client = TCPClient(2, self.serverip, self.serverport) filename = self.serverip + '_log.txt' #print(filename) IsTimeout = 0 self.f = open(filename, 'w+') while True: if client.state is SOCK_CLOSE_STATE: cur_state = client.state client.state = client.open() if client.state != cur_state: sys.stdout.write('client.state is %r\r\n' % client.state) time.sleep(1) elif client.state is SOCK_OPEN_STATE: cur_state = client.state client.state = client.connect() if client.state != cur_state: sys.stdout.write('client.state is %r\r\n' % client.state) time.sleep(1) elif client.state is SOCK_CONNECT_STATE: if client.working_state == idle_state: try: client.write(msg) client.working_state = datasent_state self.istimeout = 0 self.totaltrycount += 1 self.timer1 = threading.Timer(5.0, self.myTimer) self.timer1.start() except Exception as e: sys.stdout.write('%r\r\n' % e) elif client.working_state == datasent_state: response = client.readline() if (response != ""): sys.stdout.write(response) sys.stdout.write('\n') sys.stdout.flush() self.timer1.cancel() self.istimeout = 0 if (msg in response): logstr = '[' + self.serverip + ']' + strftime( "%d %b %Y %H:%M:%S", localtime()) + ': success\r\n' sys.stdout.write(logstr) self.successcount += 1 time.sleep(10) client.working_state = idle_state else: logstr = '[' + self.serverip + ']' + strftime( "%d %b %Y %H:%M:%S", localtime()) + ': fail by broken data\r\n' sys.stdout.write(logstr) self.failcount += 1 self.f.write(logstr) self.f.write("\r\n") time.sleep(10) client.working_state = idle_state if self.istimeout is 1: self.timer1.cancel() self.istimeout = 0 logstr = '[' + self.serverip + ']' + strftime( "%d %b %Y %H:%M:%S", localtime()) + ': fail by timeout\r\n' sys.stdout.write(logstr) self.failcount += 1 self.f.write(logstr) self.f.write("\r\n") time.sleep(5) client.working_state = idle_state response = ""