Veins 示例中的消息广播

Broadcasting of Messages in Veins example

我注意到在 Veins 演示场景中,一个节点将它创建的数据消息广播到模拟中的每个其他节点。

我试着修改了一下。我通过使用 setRecipientAddress() 函数初始化 WSM 中的收件人地址来修改 TraCIDemo11p.cc 文件中的 sendMessage() 函数。但是在运行模拟Veins 3.0的时候,我发现这个消息还在广播给除了目标节点之外的所有节点。

在其基础上,802.11p 标准是车辆通信的主要通信标准(也是 Veins 中使用的标准),进行广播。

所以基本上,无论你通过 802.11p 网络接口发送什么,它都会被广播,但是你可以通过 "source-destination checking" 来自框架。

您可以扩展 WaveShortMessage 以包含特定于您的应用程序的 SourceDestination 字段,然后执行检查是否目的地正在从预期的发件人处接收。


假设我们有两个节点 nodeSendernodeReceiver 想要通信。

nodeSender 需要在消息中包含自己的标识符(名称、ID 等):

msgToSend->setSourceAddress("nodeSender")

nodeReceiver 需要检查它 "hears" 的邮件是否来自预期的发件人。因为实际上由于 80211p

的广播性质,它会收到多个发送者的消息
if(receivedMsg->getSourceAddress() == 'nodeSender')
{
    /* this is the message which I need */
else
{
    /* do nothing with the message from other senders */
}

您可以使用车辆 SUMO id 作为地址的唯一标识符。您可以通过查询 TraCIMobility 模块获得:

cModule *tmpMobility = getParentModule()->getSubmodule("veinsmobility");
mobility = dynamic_cast<Veins::TraCIMobility*>(tmpMobility);
ASSERT(mobility);
mySumoID = mobility->getExternalId();