处理套接字连接的最佳方法是什么,我需要 var data
以换行符结束 \n
?我正在使用下面的代码,但有时 tcp
数据包被 分块 并且需要很长时间才能匹配 data.endswith("\n")
。我也尝试过其他方法,比如保存最后一行,如果它没有以 \n
结尾,并将其附加到 data
下一个循环。但这也不起作用,因为多个数据包被分块并且第一部分和第二部分不匹配。我无法控制另一端,它基本上发送以 \r\n
结尾的多行。
欢迎任何建议,因为我对套接字连接了解不多。
def receive_bar_updates(s):
global all_bars
data = ''
buffer_size = 4096
while True:
data += s.recv(buffer_size)
if not data.endswith("\n"):
continue
lines = data.split("\n")
lines = filter(None, lines)
for line in lines:
if line.startswith("BH") or line.startswith("BC"):
symbol = str(line.split(",")[1])
all_bars[symbol].append(line)
y = Thread(target=proccess_bars, kwargs={'symbol': symbol})
y.start()
data = ""
“ _正常_”示例 data
:
line1\r\n
line2\r\n
line3\r\n
分块 示例 data
:
line1\r\n
line2\r\n
lin
原文由 Pedro Lobito 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果你有一个原始输入,你想按行处理,那么 io 模块是你的朋友,因为它会按行进行数据包的低级组装。
你可以使用:
它比
endswith('\n')
更健壮,因为如果一个数据包包含嵌入的换行符('ab\ncd'
),io 模块将正确处理它。您的代码可能会变成: