sonar_temp_tcp.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #-*-coding=utf-8-*-
  2. import socket
  3. import time
  4. import binascii
  5. from multiprocessing import Process
  6. from logging_config import tcp_connector as logger
  7. SERVER_ADDRESS = ('172.16.3.0', 50227)
  8. # 客户端类定义
  9. class ClientTemp(Process):#继承Process类
  10. def __init__(self):
  11. super(ClientTemp, self).__init__()
  12. self.__sock = None
  13. self.__connected = False
  14. self.__stopped = False
  15. self.__ip = SERVER_ADDRESS[0]
  16. self.__port = SERVER_ADDRESS[1]
  17. self.__head = False
  18. def open(self):
  19. self.__stopped = False
  20. self.start()
  21. def run(self):
  22. self.__connect()
  23. self.__connected = True
  24. while True:
  25. self.__head = True # 测试,暂不发送头部信息
  26. if self.__head == False:
  27. data1 = '3f08efbe020000002dc4'
  28. data2 = 'd107efbe0e0000000401040de982d9e80c12fd1b2101d307efbe00000000d107efbe0e0000000401040de982d9e80c12fd1b2101d307efbe00000000d107efbe0e0000000401040de982d9e80c12fd1b2101d307efbe00000000d107efbe0e0000000401040de982d9e80c12fd1b2101d307efbe00000000d107efbe0e0000000401040de982d9e80c12fd1b2101d307efbe00000000'
  29. data3 = 'd307efbe00000000d207efbe1600000001071303020100a10201020101a10201020102a10201'
  30. self.send_command(data1)
  31. self.send_command(data2)
  32. self.send_command(data3)
  33. self.__head = True
  34. else:
  35. data = 'd107efbe0e0000000401040de982d9e80c12fd1b2101'
  36. # print('temp_awake...........................')
  37. self.send_command(data)
  38. time.sleep(1)
  39. def send_command(self, command):
  40. if self.__connected:
  41. try:
  42. send_data = bytes.fromhex(command)
  43. self.__sock.send(send_data)
  44. except Exception as e:
  45. time.sleep(5)
  46. self.__reconnect()
  47. # logger.info(f'Send command to [{self.name}]:[{self.__ip}]:[{self.__port}] error:{e}')
  48. else:
  49. self.__reconnect()
  50. # 建立socket连接
  51. def __connect(self):
  52. if self.__sock:
  53. self.__sock.close()
  54. self.__sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  55. self.__sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 允许重用本地地址和端口
  56. self.__sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) # 在客户端开启心跳维护
  57. self.__sock.settimeout(10) # 设置超时时间3mins
  58. try:
  59. self.__sock.connect((self.__ip, self.__port))
  60. logger.info(f'Connect to [{self.name}]:[{self.__ip}]:[{self.__port}] success !')
  61. self.__connected = True
  62. except Exception as e:
  63. logger.info(f'Connect to [{self.name}]:[{self.__ip}]:[{self.__port}] failed:{e} !!!')
  64. self.__connected = False
  65. self.__reconnect()
  66. def __reconnect(self):
  67. while True:
  68. try:
  69. if self.__sock:
  70. self.__sock.close()
  71. self.__sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  72. self.__sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  73. self.__sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) # 在客户端开启心跳维护
  74. self.__sock.settimeout(10) # 设置超时时间,单位:秒
  75. self.__sock.connect((self.__ip, self.__port))
  76. self.set_command_dict = {}
  77. self.__connected = True
  78. logger.info(f'Reconnect to [{self.name}]:[{self.__ip}]:[{self.__port}] success !')
  79. break
  80. except Exception as e:
  81. logger.info(f'Reconnect to [{self.name}]:[{self.__ip}]:[{self.__port}] failed:{e} !!! Continue reconnect in 5s..')
  82. self.__connected = False
  83. self.set_command_dict = {}
  84. time.sleep(5)
  85. # 接收服务器发送的数据
  86. def receive_data(self):
  87. try:
  88. data = self.__sock.recv(self.status_len)
  89. except socket.timeout as e:
  90. logger.error(f"{self.name}: {e}")
  91. time.sleep(5)
  92. self.__reconnect()
  93. print('recv',e)
  94. except Exception as e:
  95. logger.error(f"{self.name}: {e}")
  96. time.sleep(5)
  97. self.__reconnect()
  98. # 启动客户端
  99. if __name__ == '__main__':
  100. temp = ClientTemp() # 实例化进程对象
  101. temp.start()