我正在尝试找到如何管理在TCP / IP套接字上打破传入数据流并在某种缓冲区中聚合此数据的具体示例,以便我可以在其中找到消息(可变长度与标题+分隔符)并提取它们以重建接收应用程序的消息。
任何有效方法的好指针/链接/示例都会受到赞赏,因为我无法在网上找到好的例子,我确信其他人在过去有效地解决了这个问题。 / p>
由于
大卫
答案 0 :(得分:3)
我发现这个简单的方法效果很好。
poll
或select
此处。strchr
扫描分隔符的新数据。如果您发现了一条消息:
memcpy
将消息放入自己的缓冲区。 (注意:我这样做是因为我使用的是线程,你可能也应该这样做。)memmove
将剩余的缓冲区数据发送到缓冲区的开头并更新数据指针的结尾。有更复杂的方法。我最终没有发现它们值得打扰,但你可能视情况而定。
您可以使用带有数据指针开头和结尾的循环缓冲区。很多麻烦保持跟踪和计算剩余空间等。
您可以在查找每条消息后分配新的缓冲区。你不必复制那么多数据。在找到分隔符后,您仍然需要将多余的数据移动到新的消息缓冲区中。
不认为从套接字中一次读取一个字节的愚蠢技巧会提高性能。每次系统调用往返都会使8 kB memmove
看起来便宜。