python--socket心跳+接收轮询+自动重连+多线程

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()
原文地址:https://www.cnblogs.com/guang2508/p/13050640.html