我如何将参数添加到数据包并检索它们?
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
文件中定义。
所以我之前的数据包问题都成功解决了。但是我现在想将参数添加到我的数据包并检索它们。现在,我的代码是
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
文件中定义。