python-3.x - 如何在请求的客户端使用 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 做了同样的过程并且工作了,因为我不需要调用客户端,因为我在服务器中有公钥。
我正在使用标志来确定我想要的加密类型并指示正在执行的步骤。
如果你知道更简单的方法,我愿意改变这个过程。
解决方案
推荐阅读
- javascript - 使用 Jquery 和 ajax 删除表的多行
- javascript - 如何使用“路径”元素绘制半圆?
- docker - 如何进入部署在 Google 集群上的 docker 容器?
- c++ - Qt 中是否有签名的“sizeof”替代方案
- windows - 将文件夹结构和子目录/文件导出为文本
- javascript - 在javascript中获取具有相同ID的不同值
- sql - 随时间更新列
- javascript - select2 在所选选项上绘制图像和文本
- python - 无法在 Keras 中加载克隆模型
- java - 无法通过 SSH 使用 XForwarding 运行 armitage(可能是 java 问题)