微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何控制数据包的生成速率和发送间隔

如何解决如何控制数据包的生成速率和发送间隔

我正在尝试创建一个UDP应用程序,在该应用程序中可以单独控制数据包的生成速率和数据包发送间隔。

我的代码https://github.com/11187162/udpApp

使用上面的代码,我没有得到预期的结果并得到以下运行时错误

scheduleAt():消息(omnetpp :: cmessage)sendTimer当前为 已安排,请在模块重新安排之前使用cancelEvent() (inet :: UdpOwnApp)SensorNetworkShowcaseA.sensor3.app [0](id = 176),在 t = 0.058384669093s,事件#10

handleMessageWhenUp()的代码如下。

void UdpOwnApp::handleMessageWhenUp(cmessage *msg)
{
    if (msg->isSelfMessage()) {
        ASSERT(msg == selfMsg);
        switch (selfMsg->getKind()) {
            case START:
                processstart();
                break;

            case GENERATE:
                generatePacket();
                break;

            case SEND:
                processSend();
                break;

            case STOP:
                processstop();
                break;

            default:
                throw cRuntimeError("Invalid kind %d in self message",(int)selfMsg->getKind());
        }
    }
    else
        socket.processMessage(msg);
}

有人可以帮助我吗?

谢谢

解决方法

您已经写过“可以分别控制生成速率和数据包发送间隔” ,但是您使用相同的自消息来控制数据包的生成以及发送数据包。安排了自我消息后,便无法再进行安排。

考虑添加新的自消息以生成数据包。

顺便说一句:numGenerate设置为零,并且永远不会更改。

编辑

假设selfMsg1用于生成数据包,则只能使用以下代码:

void UdpOwnApp::handleMessageWhenUp(cMessage *msg) {
      if (msg->isSelfMessage()) {
        if (msg == selfMsg) {
          switch (selfMsg->getKind()) {
            case START:
                processStart();
                break;
            case SEND:
                processSend();
                break;
            case STOP:
                processStop();
                break;
            default:
                throw cRuntimeError("Invalid kind %d in self message",(int)selfMsg->getKind());
            }
        } else if (msg == selfMsg1) {
            if (selfMsg1->getKind() == GENERATE) {
                generatePacket();
        }
        }
      }
    else
        socket.processMessage(msg);
}

initialize()中,您应该创建selfMsg1的实例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。