1

質問をする前に、私は1か月以上それを検索していることを伝えたいと思います。私はns2を知っていると思いますが、あなたが言うことは何でも理解できるはずです[うまくいけば]

幅優先探索(BFS)を実装し、NS2のワイヤレスモバイルノードトポロジでBFSツリーを作成したいと思います。[最初に静的システムに対してそれを実行しましょう。]

私の課題:ノードのすべてのネイバーへのマルチキャストメッセージ。

今、私は私の想像の中でそれを考えました

  1. ノードはそこの位置に設定されます。[実行可能]
  2. 各ノードは、隣接するノードを見つけることができます。[それは実行可能ですか?]または私はこれらの隣人を自分で形成するために「グループ」を作成して「グループに参加」する必要があります。
  3. ネイバーへのマルチキャストメッセージ。[「グループ」を使用して実行可能]しかし、ノードが接続できるものを認識し、それ自体を実行できる方法があることを望んでいました。

これらの中で何が可能ですか?

4

1 に答える 1

3

さて、私のプロジェクトを完了した後、私はそれをどのように行ったかを共有したいと思います。私はまだ学んでいますが、はい、私はそれをこのようにしました。

シナリオはワイヤレスです。

NSではノードの生成は簡単です。

set ノード(0)[$nsノード]

set ノード(1)[$nsノード]

ここで、ノードは配列です。

ノードの位置を設定します。

$ ノード(0)はX_20.0を設定します

$ nodes(0)set Y_ 100.0

ある種の数式を使用して、ノードのトポロジーを生成できます。つまり、それらの位置付け。ns2-directory / tcl / ex/wireless-flooding.tclを見てください。

ノードごとにエージェントを生成し、ノードに接続します。

set agent(0)[new Agent / MyAgent]

$ nodes(0)attach-agent $ agent(0)$ MESSAGE_PORT

プロトコルの論理的な動作はすべてエージェントで行われるため、MyAgentのcppクラスを作成します。また、Makefileに追加します。

クラスMyAgent:public Agent {

// recv()関数をオーバーライドします。

//このクラスのオブジェクトがtclファイルで何らかの作業を行うように要求されるたびに呼び出される、このクラスのコマンド関数を追加します。

//PINGおよびPING_REPLYから取得したネイバーのアドレスを保存するためstd::vector myNeighbors;

}

次に、すべてのエージェントがPINGメッセージをブロードキャストし、PING_REPLYメッセージで送信者に返信します。

これは、パラメータaddr_=-1を指定してアドレスns_addr_tを送信することで実行できます。

 ns_addr_t naddr;
 naddr.addr_ = -1

これらのメッセージは異なるタイプのパケットであり、次のようなcppクラスで再度作成されます。

列挙型{PING、PING_REPLY};

クラスHdrPing{

タイプタイプ;

//getterおよびsetter関数とoffsetなどの他の変数。

}

分散プロトコルの作成方法とまったく同じように、メッセージの受信に関するロジックを作成するために、Agentのrecv()をオーバーライドします。

void MyAgent :: recv(Packet * p、Handle * h){

switch(HdrPing :: access(p)-> type){

    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.

}//スイッチを閉じる

}

このようにして、私は私の隣人が誰であるかを知ることができます。

より多くの種類のメッセージとより多くの機能を追加できます。

于 2013-04-24T23:07:47.400 に答える