好吧,等完成我的項目後,我想分享我是如何做到的。我仍在學習,但是,我是這樣做的。
該場景是無線的。
生成節點是簡單的在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 /所有節點 - 即 - 是 - 在範圍內,是 - 不接收消息在-浸出 –