我正在开发一个客户端-服务器应用程序。我的应用程序使用可变大小的数据包,每个数据包都有一个头部和可变长度的有效载荷。
我的困境是在进行接收时如何处理这些数据包。我遇到的大多数教程建议使用环形缓冲区,但据我所知,使用一个大小为最大可处理数据包两倍的缓冲区更有效。
如果我使用环形缓冲区,我需要一个额外的缓冲区来接收数据,然后我需要将缓冲区复制到环形缓冲区中,这意味着我需要进行一次或两次memcpys才能将缓冲区插入到环形缓冲区中。
如果我使用单个缓冲区方法,我只需要一个缓冲区,可以将其传递给recv调用,并在获取完整数据包且缓冲区中仍有属于另一个数据包的数据时使用memmove调用将数据移动到缓冲区的起始位置。
我是否理解错了?
PS. 如果您能指向任何处理可变长度数据包的源代码/示例,那将非常有帮助。
我的困境是在进行接收时如何处理这些数据包。我遇到的大多数教程建议使用环形缓冲区,但据我所知,使用一个大小为最大可处理数据包两倍的缓冲区更有效。
如果我使用环形缓冲区,我需要一个额外的缓冲区来接收数据,然后我需要将缓冲区复制到环形缓冲区中,这意味着我需要进行一次或两次memcpys才能将缓冲区插入到环形缓冲区中。
如果我使用单个缓冲区方法,我只需要一个缓冲区,可以将其传递给recv调用,并在获取完整数据包且缓冲区中仍有属于另一个数据包的数据时使用memmove调用将数据移动到缓冲区的起始位置。
我是否理解错了?
PS. 如果您能指向任何处理可变长度数据包的源代码/示例,那将非常有帮助。