2017-03-15 44 views
-1

我使用OMNeT ++ 4.6,sumo-0.22.0和Veins-4a2。RSU在finish()函数中没有收到发送的消息

在我的方案中,我修改了.rou.xml文件,以便每个节点建立的路径都是从RSU到另一个。节点根据我指定的生成定时器创建消息并将它们存储在缓冲区中。之后,节点根据发送定时器向RSU发送消息(无论是源,目的地还是遇到的RSU)。

我的目标是当每个节点离开模拟时发送它的消息以清空其缓冲区,并且模拟中创建的所有消息都将被发送。

要做到这一点的情况下,我添加了一些指令完成()函数中的节点的应用层:我发送存储在相应节点的缓冲器中的所有数据包这样的:

for (i = 0 ; i < bufferSize ; i++) { 

    msg = myBuffer.m[i]; 
    wsm->setWsmData(msg.c_str()); 
    sendMessage(wsm->getWsmData()); 
} 

的问题,即在finish()函数中发送的消息不会被RSU接收到,但是当我的模拟中的每个节点都离开时,它会到达他的目的地,这是一个RSU。

  • 我需要了解,请为什么这些消息由RSU这是目标未收到?

  • 是否有另一种解决方案在离开模拟之前发送所有存储的消息?

回答

2

对于使用WLAN发送消息,节点通常必须等待才能访问信道。在此之前,消息排队。如果在节点销毁之前立即将消息排入队列,那么这些消息很可能永远不会开始传输。

+0

非常感谢您的回复。那么,有没有办法让节点等待,直到它访问信道并发送所有消息,并在离开模拟之后? – Fariha

+0

该框架目前没有这样的代码。编写它不应该很难,但请记住,网络模拟将不再与道路交通模拟行为相同。这可能(或不可能)成为问题,具体取决于您的模拟模型。 –

+0

现在在我的模拟中,这可能不是问题,我需要做这个场景。我需要知道我是否会将代码写入应用层节点的finish()函数中?你有什么想法,我可以在框架中改变什么?我如何强制节点等待直到发送数据包将通过从RSU收到ACK发送?我可以在finish()方法中使用sleep()函数来等待数据包访问通道并将被发送吗? – Fariha