當等待定時器過期時,我需要重新廣播數據包,我遵循在How to add timer in aodv using ns2定義的步驟,我定義了代理和定時器類;交叉引用;代理構造函數中定時器對象的初始化;並最終到期(事件*)類B_suppression。當執行到達 agent->rebroadcast((Packet*)p, 0);
它將終止並顯示以下消息'無效的SDVCAST數據包類型'。從事件到包造成問題?當定時器到期時ns2重播數據包
class SDVCAST;
class B_suppression_Timer : public TimerHandler {
friend class SDVCAST;
public:
B_suppression_Timer (SDVCAST *s){agent = s;};
virtual void expire (Event *p);
private:
SDVCAST *agent;
};
class SDVCAST: public Agent
{ //define object from timer
B_suppression_Timer bstimer;
}
//initialized timer in Constructor of the SDVCAST
SDVCAST::SDVCAST(nsaddr_t id) : Agent(PT_SDVCAST),
bstimer(this){
}
// start timer
void
SDVCAST::weightepersistence(Packet *p, double delay){
bstimer.resched(delay);
}
// define expire of bstimer
void
B_suppression_Timer::expire(Event *p){
agent->rebroadcast((Packet*)p, 0);
}
感謝您的回覆,已完成此步驟。我測試協議,所以發送和接收Hello消息工作正常。通過使用Eclipse調試ns2我發現從事件到包的投射是不正確的,不知道爲什麼!所以我必須轉換到Handler類,並使用句柄函數而不是TimerHandler及其「過期」。錯誤消息'無效SDVCAST數據包類型'消失,但不幸的是執行停止並收到分段錯誤消息。 –
當模擬過於複雜時,可能會出現'Segmentation fault',或者只是無法使用ns2進行處理。有時一個操作系統的變化可以幫助。 –
我已經在Ubuntu 12.04上安裝ns 2.35。是的,我正試圖在DV-Cast協議上實現安全層,這個協議本身很複雜。儘管通過多種功能降低了複雜性。我需要使用定時器,我會做什麼?提前致謝。 –