如何在 OMNeT++ 中使用 INET 访问和使用接收节点中的数据包内容?

问题描述 投票:0回答:2

在 omnet++/INET 中,我有两个节点(Standardhost),通过扩展 UDPBasicApp 应用程序,我必须将传感器值发送到另一个节点。我做了自己的

.msg
定义,如下所示:

class PlantPacket extends FieldsChunk
{
    double sensorValue;
}

我发送这个值没有问题,我使用了这个代码:

void MyUdp::sendPacket()
{
    std::ostringstream str;
    str << packetName << "-" << numSent;
    Packet *packet = new Packet(str.str().c_str());

    const auto& payload = makeShared<PlantPacket>();
    payload->setChunkLength(B(par("messageLength")));
    payload->setSensorValue(sensorValue);
    payload->addTag<CreationTimeTag>()->setCreationTime(simTime());

    packet->insertAtBack(payload);

    L3Address destAddr = chooseDestAddr();
    socket.sendTo(packet, destAddr, destPort);
   
}

我的问题是检索接收到的节点中的

sensorValue
。我使用了这段代码,但出现了错误:

void MyUdp::processPacket(Packet *pk)
{
    EV_INFO << "Received packet: " << UdpSocket::getReceivedPacketInfo(pk) << endl;
    PlantPacket* payload = check_and_cast<PlantPacket*>(pk);
    
    EV_INFO << "packet content1: " << payload->getSensorValue() << endl;
    
    delete pk;
}

错误:无法在模块(inet::Udp)中的整数单位之间进行转换

如何解决这个问题?

omnet++ inet
2个回答
0
投票

有效负载已使用

insertAtBack
添加,因此必须使用
peekAtBack
popAtBack
获取。代码应如下所示:

void MyUdp::processPacket(Packet *pk)
{
    EV_INFO << "Received packet: " << UdpSocket::getReceivedPacketInfo(pk) << endl;
    const auto& payload = pk->peekAtBack<PlantPacket>();
            
    EV_INFO << "packet content1: " << payload->getSensorValue() << endl;
    
    delete pk;
}

0
投票

我也像你一样向数据包添加了一些信息,但 UDPBasicApp 似乎没有发送我的数据包。你是怎么解决这个问题的?

© www.soinside.com 2019 - 2024. All rights reserved.