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

How to control packet generation rate and send interval

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

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

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

scheduleAt(): Message (omnetpp::cMessage)sendTimer is currently scheduled, use cancelEvent() before rescheduling -- in module (inet::UdpOwnApp) SensorNetworkShowcaseA.sensor3.app[0] (id=176), at t=0.058384669093s, event #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);
}

有人能帮帮我吗?

谢谢

你已经写了“生成速率和数据包发送间隔可以单独控制”但是你使用相同self-message 用于控制数据包的生成以及数据包的发送。安排 self-message 后,无法再次安排。

考虑添加一个新的 self-message 来生成数据包。

顺便说一句: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 的实例。