Omnet++ Omnet++;:更改函数的位置';I don’我没有按预期工作

Omnet++ Omnet++;:更改函数的位置';I don’我没有按预期工作,omnet++,inet,Omnet++,Inet,实际上,我正在尝试编辑etherhost2函数以发送到多个目的地,并且我达到了仅第一次可以发送的程度 在原始代码中,如果条件为destMACAddress=resolveDestMACAddress(),则只需移动两个函数sendBurstPackets()和scheduleNextPacket(simTime()),函数即可正常工作。这两个函数只调用一次 这是否意味着destMacAddress在整个模拟过程中设置一次 原始代码 void EtherTrafGen::handleMessage

实际上,我正在尝试编辑etherhost2函数以发送到多个目的地,并且我达到了仅第一次可以发送的程度

在原始代码中,如果条件为destMACAddress=resolveDestMACAddress(),则只需移动两个函数sendBurstPackets()scheduleNextPacket(simTime()),函数即可正常工作。这两个函数只调用一次

这是否意味着destMacAddress在整个模拟过程中设置一次

原始代码

void EtherTrafGen::handleMessage(cMessage *msg)
{
    if (!isNodeUp())
        throw cRuntimeError("Application is not running");
    if (msg->isSelfMessage()) {
        if (msg->getKind() == START) {
            destMACAddress = resolveDestMACAddress();
            // if no dest address given, nothing to do
            if (destMACAddress.isUnspecified())
                return;
        }
        sendBurstPackets();
        scheduleNextPacket(simTime());
    }
    else
        receivePacket(check_and_cast<cPacket *>(msg));
}
void EtherTrafGen::handleMessage(cMessage*msg)
{
如果(!isNodeUp())
抛出cRuntimeError(“应用程序未运行”);
如果(msg->isSelfMessage()){
如果(msg->getKind()==START){
destMACAddress=resolveDestMACAddress();
//如果没有给出目的地地址,则无需执行任何操作
if(destMACAddress.isUnspecified())
返回;
}
sendBurstPackets();
ScheduleNextPackage(simTime());
}
其他的
接收数据包(检查和发送(msg));
}
我的变化

void EtherTrafGen::handleMessage(cMessage *msg)
{
    if (!isNodeUp())
        throw cRuntimeError("Application is not running");
    if (msg->isSelfMessage()) {
        if (msg->getKind() == START) {
if (!multipacket)
            {
                destMACAddress = resolveDestMACAddress();
                sendBurstPackets();
                scheduleNextPacket(simTime());
            }
            // if no dest address given, nothing to do
            if (destMACAddress.isUnspecified())
                return;
        }
    }
    else
        receivePacket(check_and_cast<cPacket *>(msg));
}
void EtherTrafGen::handleMessage(cMessage*msg)
{
如果(!isNodeUp())
抛出cRuntimeError(“应用程序未运行”);
如果(msg->isSelfMessage()){
如果(msg->getKind()==START){
如果(!多包)
{
destMACAddress=resolveDestMACAddress();
sendBurstPackets();
ScheduleNextPackage(simTime());
}
//如果没有给出目的地地址,则无需执行任何操作
if(destMACAddress.isUnspecified())
返回;
}
}
其他的
接收数据包(检查和发送(msg));
}

第一条消息仅适用于该条件(msg->getKind()==START),这意味着在整个模拟过程中为每个主机设置一次mac。消除这种情况使它起作用

我担心是否有其他自我信息可能与该功能错误。最好有一个单独的以太主机应用程序,只适用于我的模拟


如果知道如何查看所有自我信息,如果有人通知我,我将不胜感激。

通常,自我信息在相应的
.h
文件中定义,并作为局部变量维护(即,每个模块一个实例)。这种编程模式对于定期执行操作(如信标或流量生成)的应用程序尤其常见。