【问题标题】:How can I access and use the packet contents in the received node using INET in OMNeT++?如何在 OMNeT++ 中使用 INET 访问和使用接收节点中的数据包内容?
【发布时间】:2021-02-17 22:40:28
【问题描述】:

在 omnet++/INET 中,我有两个节点(标准主机),通过扩展 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


    【解决方案1】:

    负载已使用insertAtBack 添加,因此必须使用peekAtBackpopAtBack 获取。代码应如下所示:

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

    【讨论】:

    • 您好,谢谢您的回答。我使用了这段代码,但出现了这个错误:( no matching function for call to 'inet::Packet::peekAtBack<:plantpacket>() )
    • 您好,我使用 peekData() 代替了 peekAtback,它有效:))非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多