如何在c ++中为数据报附加标题以进行网络连接?

时间:2015-03-04 06:08:52

标签: c++11 network-programming

我有一个 struct ip ipHeader;

我想在实际数据前附加,这是 string data;

这样我就可以通过send函数将其发送到一个数据包中,该函数接收一个char *缓冲区。我将如何尝试连接这些?我需要附加此ipHeader,因为它是一个自定义标头,与发送邮件时自动附加的UDP标头不同。

编辑*澄清一下,我需要在发送时附加此标头以及附加的UDP标头。因此,SOCK_RAW不一定是我需要/想要的。

1 个答案:

答案 0 :(得分:0)

为了将两个数据作为单个数据包发送,您有两个主要选择:

  1. 将它们复制到新缓冲区中,然后发送。
  2. 在Windows上使用writev()WSASend()。)
  3. 第二种方法很有吸引力,因为它似乎是为你正在做的事情而设计的:一次发送两个(或更多)缓冲区。但是在我自己的测试中,它实际上并不比第一种方法更快(在Linux上)。

    最快最简单的解决方案通常是从头开始简单地将标头嵌入数据中。因此,无论何时分配消息,都应在开始时为标题添加空间。然后,您可以使用“placement new”来调用标头构造函数(如果有),或者只是分配其字段。