消息重组/套接字通信

发布于 2024-11-04 05:04:03 字数 329 浏览 0 评论 0原文

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

I have a socket which receives information in packets of 1024 characters or less. In those packets I some messages or parts thereof. Each message is ended with 2 characters.

The problem appears when there is fragmentation of messages across two packages. What algorithm do you recommend to handle this fragmentation? (I'm not looking to reinvent the wheel here, because I think this is a ubiquitous problem).

Example:

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

| ... | -> packet

xxx xxx ... \r\r -> a message

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

痴梦一场 2024-11-11 05:04:03
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]
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]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文