我注意到在 Veins 演示场景中,节点会将它创建的数据消息广播到模拟中的每个其他节点。
我试着修改一下。我通过使用sendMessage()
函数初始化TraCIDemo11p.cc
中收件人的地址,修改了WSM
文件中的setRecipientAddress()
函数。但是在Veins 3.0
中运行模拟时,我发现此消息仍然被广播到除目标节点之外的所有节点。
答案 0 :(得分:1)
在其基础上, 802.11p 标准是车载通信的主要通信标准(也是静音中使用的标准),广播。
所以基本上,无论你通过 802.11p 网络接口发送什么,它都会被广播,但你可以通过做"源 - 目的地检查&#34来弥补某种类型的p2p 34;来自框架。
您可以将WaveShortMessage
扩展为包含特定于您的应用程序的来源和目标字段,然后检查目标是否从目标发件人接收
假设我们有两个想要沟通的节点nodeSender
和nodeReceiver
。
nodeSender
需要在消息中包含自己的标识符(名称,ID等):
msgToSend->setSourceAddress("nodeSender")
nodeReceiver
需要检查是否有"听到"来自预期的发件人。因为实际上由于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();