我有一个套接字,它接收1024个字符或更少字符串的信息。在那些数据包中我有一些消息或其中的一部分每条消息以2个字符结束。
当两个程序包之间存在碎片碎片时,会出现此问题。您建议使用什么算法来处理这种碎片? (我不打算在这里重新发明轮子,因为我认为这是一个无处不在的问题。)
示例:
| 011 012 013 014 \ r \ r 021 022 023 | 024 \ r \ r 031 032 033 | 034 \ r \ r 041 042 043 044 \ r \ r |
| ...... | - >包
xxx xxx ... \ r \ n \ r \ n->消息
答案 0 :(得分:4)
buffer = ''
# reading loop
while True:
data = socket.recv(1024)
if not data:
break
# add the current data read by the socket to a temporary buffer
buffer += data
# search complete messages
messages = buffer.split('\r\r')
# we need at least 2 messages to continue
if len(messages) == 1:
continue
# seperator found, iterate across complete messages
for message in messages [:-1]:
# handle here the message
print message
# set the buffer with the last cutted message
buffer = messages [-1]