2013-02-08 135 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 /所有節點 - 即 - 是 - 在範圍內,是 - 不接收消息在-浸出 –

相關問題