繁体   English   中英

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

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

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

但是,我的代码在第二个 while 循环之后,在中断之后无法继续。 它从客户端接收到2个签名,并且只成功打印了两次“test”字符串,并将两个接收到的字符串都添加到output文件中,但是程序中断后将无法继续,并且不打印其他“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 function 是一个阻塞调用。 这意味着 function 在收到一些数据之前不会返回,因为not data总是错误的。

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

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

除了@Nadav 的回答,删除内部的while循环。 由于recv()是同步的,因此您不需要循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM