def handle_socket(self, sock, addr): while True: try: data = sock.recv(1024) # 解码为 str类型 str_base64 = data.decode('utf8') # aes 解密 得到 str 字符串 data_str = crypto.decrypt(str_base64) # 将 json 解析为 dict data_dic = json.loads(data_str) mes_type = data_dic['Mtype'] data_mes = data_dic['Mes'] print('收到客户端发来的数据:'+data_mes) print(threading.currentThread()) if 'heart' in mes_type: time_int = (int)(data_mes) + 1 heart_str = '服务端返回心跳:%d' %(time_int) self.sendMessage(sock, 'heart', heart_str) else: if data_mes == 'exit': break else: # 普通消息 mes = '服务端返回数据:' + data_mes self.sendMessage(sock, 'commamd', mes) except Exception as e: # 接收异常的情况下,断开连接。 print('抛出异常:',e) break self.socketClose(sock)
def createSocket(self): #初始化 监听等 sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sk.bind(self.ip_point) sk.listen() while True: print('锁-等待接收数据') self.sock, addr = sk.accept() message = '链接成功' + str(addr) self.sendMessage('commamd', message) print(message) while True: try: data = self.sock.recv(1024) # 解码为 str类型 str_base64 = data.decode('utf8') # aes 解密 得到 str 字符串 data_str = crypto.decrypt(str_base64) # 将 json 解析为 dict data_dic = json.loads(data_str) mes_type = data_dic['Mtype'] data_mes = data_dic['Mes'] print('收到客户端发来的数据:' + data_mes) print(threading.currentThread()) if 'heart' in mes_type: time_int = (int)(data_mes) + 1 heart_str = '服务端返回心跳:%d' % (time_int) # self.setLockState('on') # print(self.getLockState()) self.sendMessage('heart', heart_str) else: if data_mes == 'exit': break else: # 普通消息 mes = '服务端返回数据:' + data_mes self.sendMessage('commamd', mes) except Exception as e: # 接收异常的情况下,断开连接。 print('抛出异常:', e) break self.socketClose()
def clientConnect(): global isconnect, client, lockState #创建sockte 实例 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #定义绑定的ip 和 端口 ip_point = ('144.34.162.116', 8000) try: #绑定监听 client.connect(ip_point) isconnect = True while True: # 接受数据 try: data = client.recv(1024) # 解码为 str类型 str_base64 = data.decode('utf8') # aes 解密 得到 str 字符串 data_str = crypto.decrypt(str_base64) # 将 json 解析为 dict data_dic = json.loads(data_str) mes_type = data_dic['Mtype'] data_mes = data_dic['Mes'] print('收到服务器发来的数据:' + data_mes) if 'command' in mes_type: # 是 服务器发来的命令(开门) if data_mes in 'ff': # 是 开的命令 lockState = 'on' sendMessage('command', 'open') ble.send_open() lockState = 'off' sendMessage('command', 'close') else: # 是服务器发来的心跳数据 print(data_mes) except Exception as e: # 异常 print('error', e) break socketClose() except Exception as e: print('链接异常稍后重试!!')
print('等待接收数据') # 接受数据 sock, addr = sk.accept() message = '链接成功' + str(addr) sendMessage('commamd', message) while True: # 获取从客户端发来的数据 # 一次1K的数据 # python3.x以上的版本。网络数据的发送接受都是byte类型。 # 如果发送的数据是str类型则需要进行编解码 try: data = sock.recv(1024) # 解码为 str类型 str_base64 = data.decode('utf8') # aes 解密 得到 str 字符串 data_str = crypto.decrypt(str_base64) # 将 json 解析为 dict data_dic = json.loads(data_str) mes_type = data_dic['Mtype'] data_mes = data_dic['Mes'] print('收到客户端发来的数据:' + data_mes) if 'heart' in mes_type: #是心跳包数据 # 返回心跳包数据 +1 time_int = (int)(data_mes) + 1 heart_str = '服务端返回心跳:%d' % (time_int) sendMessage('heart', heart_str) if time != None: #如果存在time 关闭定时器触发
def handle_socket(sock, addr, point): global lockLink, lockedState while True: try: data = sock.recv(1024) # 解码为 str类型 str_base64 = data.decode('utf8') # aes 解密 得到 str 字符串 data_str = crypto.decrypt(str_base64) # 将 json 解析为 dict data_dic = json.loads(data_str) mes_type = data_dic['Mtype'] data_mes = data_dic['Mes'] print('收到客户端发来的数据:' + data_mes, point) if 'heart' in mes_type: time_int = (int)(data_mes) + 1 heart_str = '服务端返回心跳:%d' % (time_int) if point == 8000: #是 lock 的链接 设置链接状态 返回心跳数据 lockLink = 'on' lockedState = data_dic['lockState'] sendMessage(sock, 'heart', heart_str) else: # 是 客户端的心跳包 + 锁的状态 sendMessage(sock, 'heart', heart_str, lockLink, lockedState) else: if data_mes == 'exit': break else: # 普通消息 mes = '服务端返回数据:' + data_mes # # 粘 包了 # sendMessage(sock, 'command', mes) if point == 8000: lockLink = 'on' lockedState = data_dic['lockState'] # 收到 锁发来的状态信息 向所有 客户端发送锁的状态 sendLockState() # for sockone in sock_list: # sendMessage(sockone, 'heart', lockedState, lockLink, lockedState) else: #向 lockSock 发送 指令 if lockLink in 'on': sendMessage(lockSock, 'command', data_mes) else: # 网关没有链接 就直接发送给客户端开锁的情况吧(先开,延迟2s再关上) lockedState = 'on' sendLockState() lockedState = 'off' timer = threading.Timer(2.0, sendLockState) timer.start() except Exception as e: # 接收异常的情况下,断开连接。 print('抛出异常:', e) break if point == 8000: #是 lock 的链接 设置链接状态 lockLink = 'off' # 锁的链接状态发生变化 向所有 客户端发送锁的状态 sendLockState() # for sockone in sock_list: # sendMessage(sockone, 'heart', lockedState, lockLink, lockedState) socketClose(sock)
def handle_socket(sock, addr, point): global lockState while True: try: data = sock.recv(1024) # 解码为 str类型 str_base64 = data.decode('utf8') # aes 解密 得到 str 字符串 data_str = crypto.decrypt(str_base64) # 将 json 解析为 dict data_dic = json.loads(data_str) mes_type = data_dic['Mtype'] data_mes = data_dic['Mes'] print('收到客户端发来的数据:' + data_mes, point) if 'heart' in mes_type: time_int = (int)(data_mes) + 1 heart_str = '服务端返回心跳:%d' % (time_int) # if point == 8000: # #是 lock 的链接 设置链接状态 返回心跳数据 # lockLink = 'on' # lockedState = data_dic['lockState'] # sendMessage(sock, 'heart', heart_str) # else: # 是 客户端的心跳包 + 锁的状态 sendClientsMessage(sock, 'heart', heart_str, 'on', lockState) else: if data_mes == 'exit': break else: # 普通消息 # mes = '服务端返回数据:' + data_mes # # 粘 包了 # sendMessage(sock, 'command', mes) # if point == 8000: # lockLink = 'on' # lockedState = data_dic['lockState'] # # 收到 锁发来的状态信息 向所有 客户端发送锁的状态 # for sockone in sock_list: # sendMessage(sockone, 'heart', lockedState, lockLink, lockedState) # else: # #向 lockSock 发送 指令 # if lockLink in 'on': # sendMessage(lockSock, 'command', data_mes) # 是 服务器发来的命令(开门) if data_mes in 'ff': # 是 开的命令 lockState = 'on' # 收到 开锁命令 向所有 客户端发送锁的状态 for sockone in sock_list: sendClientsMessage(sockone, 'heart', lockState, 'on', lockState) ble.send_open() lockState = 'off' # 收到 开锁命令 向所有 客户端发送锁的状态 for sockone in sock_list: sendClientsMessage(sockone, 'heart', lockState, 'on', lockState) except Exception as e: # 接收异常的情况下,断开连接。 print('抛出异常:', e) break socketClientClose(sock)