Python网络客户端接收日志丢包且挂起问题求助
解决Python客户端接收服务器日志末尾丢失与挂起的问题
问题根源分析
- 判断条件无效:你用
logsreturned == ''判断接收结束,但s.recv()返回的是bytes类型,空字节流是b'',和字符串''永远不相等,这个break条件根本不会触发。 - 连接未正常关闭:如果服务器发送完所有日志后没主动关闭socket,客户端的阻塞式
recv会一直等待数据,导致程序挂起。
修正后的客户端代码
with open('raw.txt', 'wb') as f: while True: logsreturned = s.recv(512) print(logsreturned) # 空字节流意味着服务器已关闭连接,终止循环 if not logsreturned: break f.write(logsreturned)
关键注意事项
- 服务器端必须在发送完所有日志后,调用
s.close()关闭TCP连接,这样客户端的recv才会返回空bytes,触发循环终止。 - 移除了多余的
logsreturned = '',下一次循环会重新给变量赋值,这行代码完全没必要。 - 检查代码缩进,确保
while循环处于with语句块内部,避免文件提前关闭导致数据写入失败。
内容的提问来源于stack exchange,提问作者E.V.A.
相关产品推荐
相关产品推荐

