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

How do i add parameters to a packet and retrieve them?

所以我之前的数据包问题都成功解决了。但是我现在想将参数添加到我的数据包并检索它们。现在,我的代码是

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;
}

我遇到错误

Has no parameter called 'testpara'

有正确的方法吗?

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

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

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

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