C++ TCP/IP消息帧示例
我试图找到一些具体的例子,说明如何管理在TCP/IP套接字上中断传入的数据流,并将这些数据聚合到某种缓冲区中,这样我就可以在其中找到消息(具有头+分隔符的可变长度),并提取它们来为接收应用程序重建消息 任何关于有效方法的好的指针/链接/示例都将不胜感激,因为我在网上找不到好的示例,我相信过去其他人已经以有效的方式解决了这个问题C++ TCP/IP消息帧示例,c++,tcp,C++,Tcp,我试图找到一些具体的例子,说明如何管理在TCP/IP套接字上中断传入的数据流,并将这些数据聚合到某种缓冲区中,这样我就可以在其中找到消息(具有头+分隔符的可变长度),并提取它们来为接收应用程序重建消息 任何关于有效方法的好的指针/链接/示例都将不胜感激,因为我在网上找不到好的示例,我相信过去其他人已经以有效的方式解决了这个问题 聚合缓冲区的高效内存分配 快速查找消息的消息边界以将其从缓冲区中提取 谢谢 大卫我发现这个简单的方法非常有效 分配一个固定大小的缓冲区,其大小是最大消息大小的两倍。
- 聚合缓冲区的高效内存分配
- 快速查找消息的消息边界以将其从缓冲区中提取
大卫我发现这个简单的方法非常有效
- 分配一个固定大小的缓冲区,其大小是最大消息大小的两倍。一个缓冲区。在缓冲区中保留一个指向数据结尾的指针
- 分配只发生一次。下一部分是消息循环:
- 如果不使用阻塞套接字,则在此处进行
或轮询
选择
- 在结束数据指针处将数据读入缓冲区。仅读取适合缓冲区的内容
- 使用
扫描新数据中的分隔符。如果您发现一条消息:strhr
将消息放入自己的缓冲区。(注意:我这样做是因为我在使用线程,您可能也应该这样做。)memcpy
将剩余的缓冲区数据移动到缓冲区的开头,并更新数据指针的结尾memmove
- 调用消息的处理函数。(将其发送到线程池。)
不要认为像从套接字中一次读取一个字节这样的愚蠢技巧会提高性能。每次系统调用往返都会使8KB的memmove看起来很便宜。我发现这个简单的方法非常有效
- 分配一个固定大小的缓冲区,其大小是最大消息大小的两倍。一个缓冲区。在缓冲区中保留一个指向数据结尾的指针
- 分配只发生一次。下一部分是消息循环:
- 如果不使用阻塞套接字,则在此处进行
或轮询
选择
- 在结束数据指针处将数据读入缓冲区。仅读取适合缓冲区的内容
- 使用
扫描新数据中的分隔符。如果您发现一条消息:strhr
将消息放入自己的缓冲区。(注意:我这样做是因为我在使用线程,您可能也应该这样做。)memcpy
将剩余的缓冲区数据移动到缓冲区的开头,并更新数据指针的结尾memmove
- 调用消息的处理函数。(将其发送到线程池。)