повторная сборка сообщений / связь с сокетом - PullRequest
1 голос
/ 29 апреля 2011

У меня есть сокет, который получает информацию в пакетах по 1024 символа или меньше. В этих пакетах есть некоторые сообщения или их части. Каждое сообщение заканчивается двумя символами.

Проблема возникает при фрагментации сообщений по двум пакетам. Какой алгоритм вы рекомендуете для обработки этой фрагментации? (Я не собираюсь изобретать велосипед здесь, потому что думаю, что это вездесущая проблема).

Пример:

| 011 012 013 014 021 022 023 | 024 031 032 033 | 034 р 041 042 043 044 р

| ... | -> пакет

xxx xxx ... \ r \ r -> сообщение

1 Ответ

4 голосов
/ 29 апреля 2011
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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...