2013-02-08 134 views
1

在提出这个问题之前,我想告诉我我已经搜寻了一个多月。我会说,我知道ns2,但我肯定能够理解任何你会说[希望]在NS2中可以做什么以及不能做什么?

我想在NS2的无线移动节点拓扑中实现广度优先搜索(BFS)和创建BFS树。 [让我们先做静态系统。]

我的挑战:多播消息给一个节点的所有邻居。

现在,我想在我的想象

  1. 节点将在那里的位置进行设置。 [可行]
  2. 每个节点都能够找到它的邻居。 [它是否可行?]或者我将不得不做“团体”,做“加入团体”来亲自组建这些邻居。
  3. 多播消息给邻居。 [可以使用“group”],但我想知道有什么方法可以让节点知道我可以连接并自行完成。

其中可能有哪些?

回答

3

好吧,等完成我的项目后,我想分享我是如何做到的。我仍在学习,但是,我是这样做的。

该场景是无线的。

生成节点是简单的在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. 

} //关闭开关

}

这样,我了解谁是我的邻居。

可以添加更多类型的消息和更多功能。

+0

Ashish,我正在研究类似的项目。但我面临的问题是所有其他节点都没有收到我的通知。他们中的一些确实收到它并不是所有的人都在接收,他们都在传输范围 –

+0

如果你的一些人正在接收,那么我认为这可能是你的传输范围不对。你可以问你的代码问题 –

+0

感谢@ashish回应我已经在这里问了一个问题...我已经把我的传输设置在这里50米,但在50米的头不接收notificaitonhttp://stackoverflow.com /问题/ 23892557 /所有节点 - 即 - 是 - 在范围内,是 - 不接收消息在-浸出 –

相关问题