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



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

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

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

scheduleAt((:Message(omnetpp::cMessage(sendTimer当前为scheduled,在重新安排之前使用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);
}

有人能帮帮我吗?

谢谢

您已经编写了"生成速率和分组发送间隔可以分别控制,但您使用相同的自消息来控制数据包的生成以及数据包的发送。安排了自消息后,就不能再安排它了。

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

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

最新更新