从接收客户端数据的 while 循环中断后,代码将不会继续

Code will not continue after breaking from a while loop receiving client data

我已经创建了一个 client/server 设置用于将 PGP 签名信息从客户端传输到服务器。下面的代码显示了服务器代码的一部分,其中将从客户端接收到的签名添加到输出文本文件

但是,我的代码在中断后的第二个 while 循环后无法继续。 它从客户端接收到2个签名,只成功打印了两次“test”字符串并将接收到的两个字符串都添加到输出文件中,但程序在中断后不会继续,并且不会打印其他“test2”和“test3” " 字符串。

while True:

    # Accepts incoming connection, creating socket used for data transfer to client
    conn, addr = server.accept()

    print("Connected successfully")

    directory = "(Hidden for question)"

    outputFile = open((directory + "\signatures.txt"), "w")

    while True:
        data = conn.recv(2048)
        if not data: break
        print("test")
        outputFile.write(data.decode()+"\n")
        outputFile.flush()

    print("test2")

    conn.close()

print("test3")

我觉得我遗漏了一些非常明显的东西,但无法弄清楚问题所在。

您的循环永远不会中断,因为套接字上的 recv 函数是阻塞调用。 这意味着该函数在接收到一些数据之前不会 return,因此 not data 将始终为 false。

尝试将更多信息(在前 2 个签名之后)发送到套接字中,看看您的脚本是否会继续将其写入文件。

如果您想接收特定数量的 data/times,请使用变量跟踪它并使用它打破循环。

替代@Nadav 的回答,删除内部 while 循环。由于recv()是同步的,所以不需要循环。