123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #-*-coding=utf-8-*-
- import socket
- import time
- import binascii
- from multiprocessing import Process
- from logging_config import tcp_connector as logger
- SERVER_ADDRESS = ('172.16.3.0', 50227)
- # 客户端类定义
- class ClientTemp(Process):#继承Process类
- def __init__(self):
- super(ClientTemp, self).__init__()
- self.__sock = None
- self.__connected = False
- self.__stopped = False
- self.__ip = SERVER_ADDRESS[0]
- self.__port = SERVER_ADDRESS[1]
- self.__head = False
- def open(self):
- self.__stopped = False
- self.start()
- def run(self):
- self.__connect()
- self.__connected = True
- while True:
- self.__head = True # 测试,暂不发送头部信息
- if self.__head == False:
- data1 = '3f08efbe020000002dc4'
- data2 = 'd107efbe0e0000000401040de982d9e80c12fd1b2101d307efbe00000000d107efbe0e0000000401040de982d9e80c12fd1b2101d307efbe00000000d107efbe0e0000000401040de982d9e80c12fd1b2101d307efbe00000000d107efbe0e0000000401040de982d9e80c12fd1b2101d307efbe00000000d107efbe0e0000000401040de982d9e80c12fd1b2101d307efbe00000000'
- data3 = 'd307efbe00000000d207efbe1600000001071303020100a10201020101a10201020102a10201'
- self.send_command(data1)
- self.send_command(data2)
- self.send_command(data3)
- self.__head = True
- else:
- data = 'd107efbe0e0000000401040de982d9e80c12fd1b2101'
- # print('temp_awake...........................')
- self.send_command(data)
- time.sleep(1)
- def send_command(self, command):
- if self.__connected:
- try:
- send_data = bytes.fromhex(command)
- self.__sock.send(send_data)
- except Exception as e:
- time.sleep(5)
- self.__reconnect()
- # logger.info(f'Send command to [{self.name}]:[{self.__ip}]:[{self.__port}] error:{e}')
- else:
- self.__reconnect()
- # 建立socket连接
- def __connect(self):
- if self.__sock:
- self.__sock.close()
- self.__sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- self.__sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 允许重用本地地址和端口
- self.__sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) # 在客户端开启心跳维护
- self.__sock.settimeout(10) # 设置超时时间3mins
- try:
- self.__sock.connect((self.__ip, self.__port))
- logger.info(f'Connect to [{self.name}]:[{self.__ip}]:[{self.__port}] success !')
- self.__connected = True
- except Exception as e:
- logger.info(f'Connect to [{self.name}]:[{self.__ip}]:[{self.__port}] failed:{e} !!!')
- self.__connected = False
- self.__reconnect()
- def __reconnect(self):
- while True:
- try:
- if self.__sock:
- self.__sock.close()
- self.__sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- self.__sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- self.__sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) # 在客户端开启心跳维护
- self.__sock.settimeout(10) # 设置超时时间,单位:秒
- self.__sock.connect((self.__ip, self.__port))
- self.set_command_dict = {}
- self.__connected = True
- logger.info(f'Reconnect to [{self.name}]:[{self.__ip}]:[{self.__port}] success !')
- break
- except Exception as e:
- logger.info(f'Reconnect to [{self.name}]:[{self.__ip}]:[{self.__port}] failed:{e} !!! Continue reconnect in 5s..')
- self.__connected = False
- self.set_command_dict = {}
- time.sleep(5)
- # 接收服务器发送的数据
- def receive_data(self):
- try:
- data = self.__sock.recv(self.status_len)
- except socket.timeout as e:
- logger.error(f"{self.name}: {e}")
- time.sleep(5)
- self.__reconnect()
- print('recv',e)
- except Exception as e:
- logger.error(f"{self.name}: {e}")
- time.sleep(5)
- self.__reconnect()
- # 启动客户端
- if __name__ == '__main__':
- temp = ClientTemp() # 实例化进程对象
- temp.start()
|