首页 > 解决方案 > 如何在请求的客户端使用 Python 中的套接字等待键盘输入时处理数据

问题描述

我正在使用密码术创建聊天,并且正在发送一些请求以通过 python 中的套接字生成和共享密钥 (AES)。它工作的一半,但是当我需要从客户端请求某些东西时它卡住了,因为它正在等待键盘输入。一段服务器代码:

elif message["type_msg"] == b'A':
                add,rem =  message['data'].split(b'|')
                tipo = b'K'
                message = message["data"]

                for client_socket in clients:
                    # Send it to client
                    if get_clientPort(client_socket) == add.decode('utf-8'):
                        client_socket.send(tipo  + message_header(message) + message) <---------GETTING STUCK HERE
                        aes_key = receive_message(client_socket)
                        while aes_key == False:
                            aes_key = receive_message(client_socket)

                if aes_key['type_msg'] == b'k':
                    tipo = b'a'
                    message = aes_key['data']
                    for client_socket in clients:
                        # Send it to client
                        if get_clientPort(client_socket) == rem.decode('utf-8'):
                            client_socket.send(tipo  + message_header(message) + message)

部分客户端代码:

elif tipo == b'a':
        if os.path.isfile(f"AES_key/{my_username}/{my_username}_{add}.pem"):
            aes_key=rsa_read_public(f"AES_key/{my_username}/{my_username}_{add}.pem")
        #request key
        else:
            tipo = b'A'
            req = f'{add}|{my_username}'
            req = req.encode('utf-8')
            message_header = f"{len(req):<{HEADER_LENGTH}}".encode('utf-8')
            client_socket.send(tipo +message_header + req) <---------GETTING STUCK HERE
            recKey = receive_message(client_socket)
            while recKey == False:
                recKey = receive_message(client_socket)

            aes_key = recKey['data']
            if not os.path.exists(f"AES_key/{my_username}/"):
                folder = os.makedirs(f"AES_key/{my_username}/")
            #save key
            key = io.open(f"AES_key/{my_username}/{my_username}_{add}.pem", 'wb')
            key.write(aes_key)
            key.close()
            aes_key = rsa_read_public(f"AES_key/{my_username}/{my_username}_{add}.pem")
            tipo = b'a'

发生这种情况是因为客户端正在等待键盘输入。我用 RSA 做了同样的过程并且工作了,因为我不需要调用客户端,因为我在服务器中有公钥。

我正在使用标志来确定我想要的加密类型并指示正在执行的步骤。

如果你知道更简单的方法,我愿意改变这个过程。

标签: python-3.xsocketsencryptionaesclient-server

解决方案


推荐阅读