消息重组/套接字通信

时间:2011-04-29 07:20:31

标签: python sockets

我有一个套接字,它接收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->消息

1 个答案:

答案 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]