如何将参数添加到数据包并检索它们?

时间:2020-01-15 09:33:29

标签: omnet++ inet

因此,我在以前的数据包问题中取得了成功。但是我现在想向我的数据包中添加参数并检索它们。现在,我的代码是

Packet *pk = new Packet(msgName);
const auto& payload = makeShared<ApplicationPacket>();
payload -> setChunkLength(B(msgByteLength));
pk -> insertAtBack(payload);
pk->addPar("testpara") = "a";

获取数据包:

void Receiver::processPacket(Packet *pk)
{
    char a = pk->par("testpara");
    EV_INFO << a << endl;
}

出现错误

没有名为“ testpara”的参数

有正确的方法吗?

1 个答案:

答案 0 :(得分:1)

您所做的不正确。向数据包中添加参数将仅添加参数对象,但是一旦将参数和所有标签以及其他元信息放置在网络上,该参数就会从数据包中剥离。仅传输实际上在数据包定义内的数据(即序列化并放置在物理介质上的数据)。

正确的方法是,将数据添加到ApplicationPacket.msg定义中,然后就可以直接在payload上进行设置。 (消息编译器将生成必要的setter / getter方法)。

所使用的ApplicationPacket只是INET中包含sequenceNumber作为数据的示例。但是,您可以定义自己的有效负载结构,只需扩展FieldsChunk文件中的.msg类并将其用作应用程序代码中的有效负载即可。

TLDR:绝对不要在INET的数据包上使用参数。标签应仅用于同一主机内部的跨层通信。应该始终在.msg文件中定义要传输的数据。