Omnet++ 如何向数据包添加参数并检索它们?

Omnet++ 如何向数据包添加参数并检索它们?,omnet++,inet,Omnet++,Inet,因此,我已经成功地在我以前的包问题。但是,我现在想向数据包中添加参数并检索它们。现在,我的代码是 Packet *pk = new Packet(msgName); const auto& payload = makeShared<ApplicationPacket>(); payload -> setChunkLength(B(msgByteLength)); pk -> insertAtBack(payload); pk->addPar("testpar

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

Packet *pk = new Packet(msgName);
const auto& payload = makeShared<ApplicationPacket>();
payload -> setChunkLength(B(msgByteLength));
pk -> insertAtBack(payload);
pk->addPar("testpara") = "a";
Packet*pk=新包(msgName);
const auto&payload=makeShared();
有效负载->设置块长度(B(msgByteLength));
pk->insertback(有效载荷);
pk->addPar(“testpara”)=“a”;
正在检索数据包:

void Receiver::processPacket(Packet *pk)
{
    char a = pk->par("testpara");
    EV_INFO << a << endl;
}
void Receiver::processPacket(Packet*pk)
{
字符a=pk->par(“测试段”);

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

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

顺便说一句,您正在使用的只是INET中的一个示例,其中包含一个
sequenceNumber
作为数据。但是您可以定义自己的负载结构,只需扩展
.msg
文件中的
字段schunk
类,并将其用作应用程序代码中的负载


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

如果您需要答案,请发布相关代码。我们不知道您的par(“blah”)和addPar(“blah”)是什么不要查看代码。可能错误与char a=“a”相同?代码非常相关。它们只是测试参数。错误清楚地表明没有称为“testpara”的此类参数。因此,我要问的问题是如何读取数据包或从数据包中检索参数。当您明确为参数分配字符串文字时,是否可以从参数中检索字符?这在这里并不重要,因为它用于测试目的。主要问题是它找不到名为“testpara”的参数.要么我添加错误,要么检索错误。可能是你传递错误,发送错误,接收错误。我们怎么知道?你的“非常相关”代码中没有包含任何内容。感谢您的回复。是的,几天前我就知道了。我通过数据包的数据段发送数据。我认为这是一种解决方法,但事实证明这是正确的做法。谢谢!