如何实现客户端间隔1秒逐个发送加密文本字符串至服务器?
实现逐个加密发送字符串并间隔1秒的方案
我来帮你调整代码实现这个需求~咱们需要针对几个核心点做修改,把一次性读取发送改成逐个处理,同时加入延迟和服务器返回的接收逻辑:
修改后的完整代码
import socket import time # 导入time模块实现1秒间隔 # 假设你的publickey已经提前完成初始化(比如通过RSA密钥生成) # publickey = RSA.importKey(...) # 1. 读取文件并拆分出单个字符串(假设每个字符串单独占一行,可按需调整拆分逻辑) with open("textinput.txt", "r", encoding="utf-8") as inFile: # 过滤空行并去掉换行符,得到3个字符串的列表 strings_list = [line.strip() for line in inFile if line.strip()] ipaddr = "127.0.0.1" portnr = 11200 # 建立Socket连接 connectie = socket.socket(socket.AF_INET, socket.SOCK_STREAM) connectie.connect((ipaddr, portnr)) try: for idx, raw_str in enumerate(strings_list): # 2. 对单个字符串单独加密(先转成字节流,符合RSA加密要求) str_bytes = raw_str.encode("utf-8") enc_data = publickey.encrypt(str_bytes, 16) # 3. 发送当前加密后的字符串 connectie.send(enc_data[0]) print(f"已发送第{idx+1}个加密字符串") # 4. 接收服务器返回的解密结果 # 注意:bufsize可根据实际字符串长度调整,这里用1024作为示例 decrypted_str = connectie.recv(1024).decode("utf-8") print(f"服务器返回解密内容:{decrypted_str}") # 5. 最后一个字符串发送后无需等待,其余发送完成后等待1秒 if idx != len(strings_list) - 1: time.sleep(1) finally: # 无论是否出错,最后都关闭连接 connectie.close()
关键细节说明
- 字符串拆分逻辑:我默认文件里每个字符串单独占一行,如果你的文件用逗号/空格等其他分隔符,把读取逻辑改成
strings_list = inFile.read().split("你的分隔符")即可,记得过滤掉空字符串。 - 加密与发送:每个字符串单独转字节、单独加密,确保发送的是单个字符串的加密结果,而非整体内容。
- 接收服务器返回:每次发送后立刻接收服务器的解密响应,保证通信流程的同步性。
- 延迟控制:用
time.sleep(1)实现1秒间隔,且最后一个字符串发送后不再等待,避免多余的延迟。
内容的提问来源于stack exchange,提问作者N3ur0
相关产品推荐
相关产品推荐

