因此,我在以前的数据包问题中取得了成功。但是我现在想向我的数据包中添加参数并检索它们。现在,我的代码是
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”的参数
有正确的方法吗?
答案 0 :(得分:1)
您所做的不正确。向数据包中添加参数将仅添加参数对象,但是一旦将参数和所有标签以及其他元信息放置在网络上,该参数就会从数据包中剥离。仅传输实际上在数据包定义内的数据(即序列化并放置在物理介质上的数据)。
正确的方法是,将数据添加到ApplicationPacket.msg定义中,然后就可以直接在payload
上进行设置。 (消息编译器将生成必要的setter / getter方法)。
所使用的ApplicationPacket只是INET中包含sequenceNumber
作为数据的示例。但是,您可以定义自己的有效负载结构,只需扩展FieldsChunk
文件中的.msg
类并将其用作应用程序代码中的有效负载即可。
TLDR:绝对不要在INET的数据包上使用参数。标签应仅用于同一主机内部的跨层通信。应该始终在.msg
文件中定义要传输的数据。