从tcp套接字读取post请求的最佳方式?

u91tlkcl  于 2023-01-25  发布在  其他
关注(0)|答案(1)|浏览(221)

我正在写一个网络服务器在c。我正在与TCP套接字,我想知道如何读取后请求,并把它放到一个缓冲区。
我能做的是首先读取post header in a buffer with the fixed length然后创建一个基于content_length的动态缓冲区并读取动态缓冲区中的主体.但是因为post header的大小可以变化,在读取之后,包含该header的缓冲区也可以包含post request的主体.我可以尝试进一步解析它,但是这样做是否有效?有更好的方法吗?

eqqqjvef

eqqqjvef1#

那么,在你的情况下,我会说,“最好的方法”是把每一步分为自己的过程。
首先,为了解析消息,您必须不断地从底层设备(文件、套接字、管道等)读取raw字节,并“馈送”解析器,直到消息完成。
解析消息也可以被划分为不同的步骤:

  • 解析起始行
  • 解析报头
  • 解析正文(如果有)

由于每一步都涉及到处理未知大小的字节(由分隔符分隔并且不是特定大小的,除非我们已经“解析”了内容长度并且知道主体大小),因此每个过程都有其自己的缓冲区需求,例如:

  • 起始行由以下内容组成:\r\n
  • 标头由:\r\n组成
  • 正文的组成由标题决定
  • 并且完整消息的格式为〈header\r\nbody〉,其中正文部分是可选的(内容长度为零)

所以长话短说您必须将消息解析器划分为不同的处理步骤(如果您希望避免意大利面条式代码,强烈建议您这样做),并决定何时使用固定大小或可重新分配的缓冲区以及如何重用它们(如果没有严格按照每个步骤进行分隔的话)。一旦您完成了这些操作并有了一个像样的实现,那么我们就可以讨论如何减少内存分配的使用和缓冲区的重用。

相关问题