从接收客户端数据的 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()
是同步的,所以不需要循环。
我已经创建了一个 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()
是同步的,所以不需要循环。