#c #time #udp #simulation #omnet
#c #время #udp #Симуляция #omnet
Вопрос:
Мне нужно изменить UdpEchoApp (из пакета Inet), чтобы перед отправкой пакета обратно он ожидал «x» секунд времени моделирования. Я пытался сделать что-то вроде:
simtime_t before;
//something to calculate
simtime_t after;
if (after-before > x) {continue}
else {do something and then recalculate after}
но это приводит к сбою Qtenv. Могу ли я что-нибудь сделать для решения этой проблемы?
Я также публикую функцию, которая отправляет обратно полученный пакет:
void UdpEchoApp::socketDataArrived(UdpSocket *socket, Packet *pk)
{
// determine its source address/port
L3Address remoteAddress = pk->getTag<L3AddressInd>()->getSrcAddress();
int srcPort = pk->getTag<L4PortInd>()->getSrcPort();
pk->clearTags();
pk->trim();
// statistics
numEchoed ;
emit(packetSentSignal, pk);
// send back
socket->sendTo(pk, remoteAddress, srcPort);
}
Спасибо
Ответ №1:
Ваш код неверен: время моделирования увеличивается средой моделирования в соответствии с входящими событиями. Другими словами, время моделирования изменяется вне стандартных методов, которые определяют поведение модуля.
Чтобы имитировать задержку во время моделирования, нужно использовать selfmessage.
Короче говоря:
- В
socketDataArrived()
:
- запомнить пакет для отправки и
remoteAddress
в буфере, - запланируйте отправку сообщения
x
секундами позже (используяscheduleAt()
).
- В
handleMessageWhenUp()
когда произойдет ваше самосообщение, извлеките пакет из буфера и отправьте его.