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)
Example #2
0
    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()
Example #3
0
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('链接异常稍后重试!!')
Example #4
0
    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)
Example #6
0
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)