好吧,等完成我的项目后,我想分享我是如何做到的。我仍在学习,但是,我是这样做的。
该场景是无线的。
生成节点是简单的在NS:
节点集合(0)[$纳秒节点]
组节点(1)[$纳秒节点]
其中节点是数组。
节点上设置的位置:
$节点(0)设置X_ 20.0
$节点(0)设置Y_ 100.0
您可以使用某种数学方程式来生成节点的拓扑。即它们的定位。看看ns2-directory/tcl/ex/wireless-flooding.tcl。
为每个节点生成代理并将其与节点连接。
集代理(0)[新代理/ MyAgent]
$节点(0)附加剂$剂(0)$ MESSAGE_PORT
因为我们所有的逻辑工作的协议在代理中完成,我们创建一个cpp类的MyAgent。还将其添加到Makefile中。
类MyAgent:公共代理{
//覆盖的recv()函数。
//当这个类的对象被要求在tcl文件中做一些工作时,为这个类添加命令函数。
//用于存储邻居的地址,因为我从PING和PING_REPLY获得 std :: vector myNeighbors;
}
然后每个代理广播PING消息,并且以PING_REPLY消息回复给发送者。
这可以通过发送具有参数addr_地址ns_addr_t进行= -1
ns_addr_t naddr;
naddr.addr_ = -1
这些消息是不同类型的数据包和再次创建在CPP类等
枚举类型{PING ,PING_REPLY};
class HdrPing {
Type type;
// getter和setter函数和其他变量如偏移量。
}
有关接收到任何消息,该消息是完全一样我们的分布式协议是如何制造编写我们的逻辑,我们覆盖代理
空隙MyAgent ::的recv的的recv()(分组* p,手柄* H){
开关(HdrPing ::访问(对) - >类型){
case PING:
// send PING_REPLY back to sender and add the source of the packet p
// to my neighbor list.
// we can get it from ipHdr->saddr(), which is source address in the
// IP header of the packet.
break;
case PING_REPLY:
// add the sender of messge to my neighbor list.
break;
// other types of messages are also programmed here.
} //关闭开关
}
这样,我了解谁是我的邻居。
可以添加更多类型的消息和更多功能。
Ashish,我正在研究类似的项目。但我面临的问题是所有其他节点都没有收到我的通知。他们中的一些确实收到它并不是所有的人都在接收,他们都在传输范围 –
如果你的一些人正在接收,那么我认为这可能是你的传输范围不对。你可以问你的代码问题 –
感谢@ashish回应我已经在这里问了一个问题...我已经把我的传输设置在这里50米,但在50米的头不接收notificaitonhttp://stackoverflow.com /问题/ 23892557 /所有节点 - 即 - 是 - 在范围内,是 - 不接收消息在-浸出 –