关于 in.readLine() 卡死的问题!!!

本文探讨了在使用Socket进行网络通信时,客户端执行in.readline()出现卡死现象的原因,并指出服务端使用out.print();而非out.println();可能是问题所在。文章通过实例分析了这一常见错误,并提供了解决方案。
今天做socket 连接的时候发现客户端执行到in.readline()就卡死了,没有报错误出来,上网google 发现 服务端out.print();方法这里出错了,如果要使用in.readline() 那么服务器端就要使用 out.println(); 一个ln引发的问题啊!

加油!
class LogMonitor: def __init__(self, device): self.device = device self.target_logs = [] # 目标日志列表 self.start_flag = False self.regex = None self.log_cmd = device.log_cmd('hookAbility') self.proc = None self.log_file = None # 记录hook日志 self.file_writer = None def thread_function(self): logger.i('LogMonitor thread, cmd: %s' % self.log_cmd) cmd = self.log_cmd if isinstance(self.log_cmd, str): cmd = shlex.split(self.log_cmd, posix=False) # p = subprocess.Popen(args=self.log_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False) p = subprocess.Popen(args=cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False) self.proc = p logger.i('LogMonitor thread process: %d' % p.pid) try: if self.log_file: self.file_writer = open(self.log_file, 'a') while self.start_flag: line = p.stdout.readline() if not line: break s = line.decode("utf-8").strip() if self.file_writer: self.file_writer.write('LogMonitor thread:' + s + '\n') if self.regex and re.search(self.regex, s): if len(self.target_logs) >= 1000: self.target_logs.clear() self.target_logs.append(s) # for line in iter(p.stdout.readline, b''): # if not self.start_flag: # logger.i('LogMonitor thread run flag = %s' % self.start_flag) # break # s = line.decode("utf-8").strip() # logger.i('LogMonitor thread: %s ' % s) # if self.log_file: # with open(self.log_file, 'a') as f: # f.write(s + '\n') # match = re.search(self.regex, s) # if match: # logger.i('LogMonitor thread find one hook log: %s' % s) # if len(self.target_logs) > 1000: # self.target_logs = [] # 超过指定长度清空 # self.target_logs.append(s) except Exception as e: logger.e(f'LogMonitor thread exception: {e}') import traceback logger.e(traceback.format_exc()) finally: if self.file_writer: self.file_writer.flush() self.file_writer.close() self.file_writer = None p.stdout.close() p.kill() logger.i('LogMonitor thread end shutdown log process') def start(self, regex=None): if not regex: return self.regex = regex if self.start_flag: return self.start_flag = True self.target_logs = [] # 创建线程 thread = threading.Thread(target=self.thread_function) thread.start()我将注释掉的部分改为当前的,有没有什么问题
07-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值