質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

2323閲覧

ns3でシュミレーションを実行することができません

hatana25

総合スコア13

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/09/03 07:02

マルチキャストのソースノードから多数のノードにメッセージを送るプログラムを作成しています.

パケットは送信することができたのですが,メッセージにする場合,どのようにしたらよいでしょうか.

/* -- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -- /
/
payload-test.cc: send a greeting message between two nodes

  • F.Qian, Oct. 2013
  • src(source) -----net(10Mbps,5ms)----- dst(destination)
  • 192.168.1.0/24

*/

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>

#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"
#include "ns3/tcp-header.h"
#include "ns3/udp-header.h"

#include "ns3/csma-module.h"

#define NET_MASK "255.255.255.0"
#define NET_ADDR "192.168.1.0"
#define FIRST_NO "0.0.0.1"
#define PORT 50000

using namespace ns3;
using namespace std;

NS_LOG_COMPONENT_DEFINE ("PayloadTest");

void
ReceivePacket (Ptr<Socket> socket)
{
Ptr<Packet> packet;
Address from;

uint8_t buf[1024]; memset(buf, 0, sizeof(buf)); while ((packet = socket->RecvFrom (from))) { if (packet->GetSize () > 0) { packet->CopyData(buf, 1024); InetSocketAddress iaddr = InetSocketAddress::ConvertFrom (from); char t[10]; sprintf(t,"%8.5f",Simulator::Now ().GetSeconds ()); std::cout << std::setw(10) << std::setprecision(4) << t << " received "<< packet->GetSize () << " bytes from: (" << iaddr.GetIpv4 () << ", " << iaddr.GetPort () << ")" << " --- " << buf << std::endl; } }

}

InetSocketAddress
setSocketAddress(Ptr<Node> node, uint32_t port)
{
Ipv4InterfaceAddress adr = node->GetObject <Ipv4> ()->GetAddress(1, 0);
return InetSocketAddress (Ipv4Address(adr.GetLocal()), port);
}

int GetRandom(int min, int max);

int main (int argc, char *argv[], char *envp[])
{
CommandLine cmd;
cmd.Parse (argc, argv);

uint16_t times=1; //乱数を生成する int dom=0; srand((unsigned int) time(NULL) );

dom=GetRandom(0,10);

cout << "dom=" << dom <<endl; //dom=9; std::string greeting_msg; if(dom== 0 || 2 || 4 || 6 || 8){ greeting_msg = "hello ns3 world !!!";} else{ greeting_msg = "hello!!!";} //timesには送信する回数、greetingには送信するメッセージを指定する cmd.AddValue("times", "The number of times to send.", times); cmd.AddValue("greeting", "The greeting message from source to destination.", greeting_msg); cmd.Parse(argc, argv); //ノードを生成する NS_LOG_INFO ("Create nodes."); NodeContainer c; c.Create (4); NodeContainer c0 = NodeContainer (c.Get (0), c.Get (1), c.Get (2), c.Get (3)); NS_LOG_INFO ("Build Topology."); CsmaHelper csma; csma.SetChannelAttribute ("DataRate", DataRateValue (DataRate (5000000))); csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2))); NetDeviceContainer nd0 = csma.Install (c0); //LAN NS_LOG_INFO ("Add IP Stack."); InternetStackHelper internet; internet.Install (c); NS_LOG_INFO ("Assign IP Addresses."); Ipv4AddressHelper ipv4Addr; ipv4Addr.SetBase ("10.1.1.0", "255.255.255.0"); ipv4Addr.Assign (nd0); NS_LOG_INFO ("Configure multicasting."); Ipv4Address multicastSource ("10.1.1.1"); Ipv4Address multicastGroup ("225.1.2.4"); //ここで、マルチキャストルーティングを設定します Ipv4StaticRoutingHelper multicast; // 2) 送信者n0にデフォルトマルチキャストルートを設定する Ptr<Node> sender = c.Get (0); Ptr<NetDevice> senderIf = nd0.Get (0); multicast.SetDefaultMulticastRoute (sender, senderIf); //OnOffアプリケーションを作成し、ノード0からマルチキャストグループにUDPデータグラムを送信します NS_LOG_INFO ("Create Applications."); uint16_t multicastPort = 9; // Discard port (RFC 863) //数秒ごとにパケットを生成するマルチキャストパケットジェネレータを設定する OnOffHelper onoff ("ns3::UdpSocketFactory", Address (InetSocketAddress (multicastGroup, multicastPort))); onoff.SetConstantRate (DataRate ("255b/s")); onoff.SetAttribute ("PacketSize", UintegerValue (128)); ApplicationContainer srcC = onoff.Install (c0.Get (0)); //起動と停止をアプリケーションに指示する srcC.Start (Seconds (1.)); srcC.Stop (Seconds (30.)); //これらのパケットを受信するオプションのパケットシンクを作成する PacketSinkHelper sink ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), multicastPort)); /* // シンクを始める sinkC.Start (Seconds (1.0)); sinkC.Stop (Seconds (10.0)); */ NS_LOG_INFO ("Configure Tracing."); //すべてのエンキュー、デキュー、およびNetDevice受信イベントのトレースを構成する //Asciiトレース出力は "csma-multicast.tr"ファイルに送信される AsciiTraceHelper ascii; csma.EnableAsciiAll (ascii.CreateFileStream ("csma-multicast.tr")); //また、いくつかのtcpdumpトレースを構成する。各インタフェースがトレースされる。出力ファイルの名前は次のとおり。 //csma-multicast- <nodeId> - <interfaceId> .pcap //"tcpdump -r"コマンドで読むことができます(タイムスタンプを正しく表示するには "-tt"オプションを使用してください) csma.EnablePcapAll ("csma-multicast", false); // 送信するパケットを組み立てる uint8_t buf[1024]; uint16_t bufsize; bufsize = greeting_msg.size(); memcpy(buf, greeting_msg.c_str(),bufsize); Ptr<Packet> packet = Create<Packet> (buf, bufsize); //パケットを送信する for(uint16_t i=0;i<times;i++) c0.Get(0) -> Send (packet);

//シュミレーションをスタート
NS_LOG_INFO ("Run Simulation.");
Simulator::Run ();
Simulator::Destroy ();
NS_LOG_INFO ("Done.");

return 0;

}

int GetRandom(int min, int max){
return min + (int)(rand()*(max - min + 1.0) / (1.0 + RAND_MAX));
}

このプログラムを実行したところ,

error: ‘class ns3::Node’ has no member named ‘Send’
c0.Get(0) -> Send (packet);
というエラーがでてきました.

改善方法を教えていただきたいです.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問