Python 3.6.4网络文件写入异常:脚本死循环且文件始终为0KB
解决Python文件传输时无限循环+目标文件0KB的问题
嘿,我一眼就看到你代码里的几个关键问题,这正是导致无限循环和文件一直0KB的原因,咱们一步步来修复:
错误地将
s.accept()放在while循环内:
这个调用是用来等待新的客户端连接的,你把它放在循环里,意味着每次循环都要等一个新连接才能继续。但实际上你应该先接受一次连接,然后在同一个连接里持续接收数据,直到传输完成。判断数据结束的逻辑错误:
Python3中conn.recv(1024)返回的是bytes对象,不是字符串,所以data == ""这个条件永远不会触发,循环根本停不下来。正确的判断方式是检查if not data——当对方关闭连接时,recv()会返回空的bytes对象,这时候就可以终止循环了。连接关闭的位置不正确:
你现在的conn.close()写在文件关闭之后,但因为循环一直跑,这段代码根本执行不到。而且应该在接收完所有数据后再关闭连接。
下面是修正后的完整代码:
# 先接受一次连接,放在循环外面! conn, addr = s.accept() f = open(f_name+'.txt', 'wb') while True: data = conn.recv(1024) # 用正确的方式判断数据是否接收完毕 if not data: break f.write(data) # 先关闭文件,再关闭连接 f.close() conn.close() print("File closed and connection closed")
内容的提问来源于stack exchange,提问作者Rajiv Makwana
相关产品推荐
相关产品推荐

