1、下位机给上位机间隔发送心跳
2、下位机收到上位机的指令时,返回相应参数(这里写固定死了)
3、直接放while循环里,实现断线重连
4、使用了17个线程模拟17个下位机
# -*- coding:utf-8 -*- # Author : tang # Data : 2020-06-05 9:02:56 import socket import time,threading def tt1(tcp_port,tcp_heartbeat,receive): #一个主线程模拟一个下位机,tcp_port端口,tcp_heartbeat心跳包,receive数据 def doConnect(ip_port): #建立socket连接 sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: sk.connect(ip_port) except: pass return sk def heartbeats(sk): #心跳 while True: msg = str(time.strftime("%Y-%m-%d %H:%M:%S")) try: heartbeat = tcp_heartbeat sk.sendall(bytes(heartbeat, 'utf8')) except socket.error: print(f' socket error,do reconnect:{msg}') time.sleep(3) break except: print(f' other error occur:{msg}') time.sleep(3) break time.sleep(30) def rec_send(sk): #接收数据并返回 while True: msg = str(time.strftime("%Y-%m-%d %H:%M:%S")) try: cmd=receive sk.recv(1024) sk.sendall(cmd) except socket.error: print(f' socket error,do reconnect:{msg} {receive}') time.sleep(3) break except: print(f' other error occur:{msg} {receive}') time.sleep(3) break ip_port = ('139.196.194.247', tcp_port) while True: sk = doConnect(ip_port) # print('客户端启动:') t1=threading.Thread(target=heartbeats,args=(sk,)) #心跳线程 t2=threading.Thread(target=rec_send,args=(sk,)) #收发线程 t1.start() t2.start() t1.join() t2.join() return1=b'xFBx69x08x50x22x02x07x18x10x07x31' return2=b'xFBx69x08x50x22x02x07x18x10x07x32' return3=b'xFBx69x08x50x22x02x07x18x10x07x33' return4=b'xFBx69x08x50x22x02x07x18x10x07x34' return5=b'xFBx69x08x50x22x02x07x18x10x07x35' return6=b'xFBx69x08x50x22x02x07x18x10x07x36' return7=b'xFBx69x08x50x22x02x07x18x10x07x37' return8=b'xFBx69x08x50x22x02x07x18x10x07x38' return9=b'xFBx69x08x50x22x02x07x18x10x07x39' return10=b'xFBx69x08x50x22x02x07x18x10x07x40' return11=b'xFBx69x08x50x22x02x07x18x10x07x41' return12=b'xFBx69x08x50x22x02x07x18x10x07x42' return13=b'xFBx69x08x50x22x02x07x18x10x07x43' return14=b'xFBx69x08x50x22x02x07x18x10x07x44' return15=b'xFBx69x08x50x22x02x07x18x10x07x45' return16=b'xFBx69x08x50x22x02x07x18x10x07x46' return17=b'xFBx69x08x50x22x02x07x18x10x07x47' client1=threading.Thread(target=tt1,args=(40021,'sczy21',return1,)) client2=threading.Thread(target=tt1,args=(40022,'sczy22',return2,)) client3=threading.Thread(target=tt1,args=(40023,'sczy23',return3,)) client4=threading.Thread(target=tt1,args=(40024,'sczy24',return4,)) client5=threading.Thread(target=tt1,args=(40025,'sczy25',return5,)) client6=threading.Thread(target=tt1,args=(40026,'sczy26',return6,)) client7=threading.Thread(target=tt1,args=(40027,'sczy27',return7,)) client8=threading.Thread(target=tt1,args=(40028,'sczy28',return8,)) client9=threading.Thread(target=tt1,args=(40029,'sczy29',return9,)) client10=threading.Thread(target=tt1,args=(40030,'sczy30',return10,)) client11=threading.Thread(target=tt1,args=(40031,'sczy31',return11,)) client12=threading.Thread(target=tt1,args=(40032,'sczy32',return12,)) client13=threading.Thread(target=tt1,args=(40033,'sczy33',return13,)) client14=threading.Thread(target=tt1,args=(40034,'sczy34',return14,)) client15=threading.Thread(target=tt1,args=(40035,'sczy35',return15,)) client16=threading.Thread(target=tt1,args=(40036,'sczy36',return16,)) client17=threading.Thread(target=tt1,args=(40037,'sczy37',return17,)) client1.start() time.sleep(0.5) client2.start() time.sleep(0.5) client3.start() time.sleep(0.5) client4.start() time.sleep(0.5) client5.start() time.sleep(0.5) client6.start() time.sleep(0.5) client7.start() time.sleep(0.5) client8.start() time.sleep(0.5) client9.start() time.sleep(0.5) client10.start() time.sleep(0.5) client11.start() time.sleep(0.5) client12.start() time.sleep(0.5) client13.start() time.sleep(0.5) client14.start() time.sleep(0.5) client15.start() time.sleep(0.5) client16.start() time.sleep(0.5) client17.start() time.sleep(0.5) client1.join() client2.join() client3.join() client4.join() client5.join() client6.join() client7.join() client8.join() client9.join() client10.join() client11.join() client12.join() client13.join() client14.join() client15.join() client16.join() client17.join()