繁体   English   中英

NS3套接字混乱(需要帮助理解)

NS3 Socket Confusion (Need Help Understanding)

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在使用lena-simple-epc.cc作为示例代码,并且尝试用特定的自定义应用程序替换默认应用程序。 我的最终目标是将单个数据包从一个Ue传输到另一个Ue。 我删除了代码中包含PacketSinkHelper和UDPClientHelp的部分,并将其替换为:

   for (uint32_t n = 0; n < ueNodes.GetN(); n++)
{
    Ptr<ns3::Socket> srcSkt = Socket::CreateSocket(ueNodes.Get(n), TypeId::LookupByName ("ns3::UdpSocketFactory"));
    InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 20000);
    srcSkt->Bind (local);
    srcSkt->SetRecvCallback (MakeCallback (&ReceivePacket));
}
uint16_t sinkPort = 20000;
Address sinkAddress (InetSocketAddress (ueIpIface.GetAddress (1), sinkPort));
Ptr<Socket> ns3UdpSocket = Socket::CreateSocket (ueNodes.Get(1), UdpSocketFactory::GetTypeId ());
ns3UdpSocket->Bind();
ns3UdpSocket->Connect(sinkAddress);
Ptr<Packet> packet = Create<Packet> (reinterpret_cast<const uint8_t*> ("Packet Via (LTE simulating Safety)"), 39);
ns3UdpSocket->Send(packet);

对于接收回叫,我有:

    void ReceivePacket (Ptr<Socket> socket){
     Ptr<Packet> packet;
     uint32_t nodeIdr=socket->GetNode()->GetId();
     while ((packet = socket->Recv ()))
     {
        uint8_t buf[1300];
        packet->CopyData(buf , packet->GetSize());
        std::cout<<"Data, "<<buf<< ", SimulatorTime, "<<Simulator::Now().GetSeconds()<<" NodeIDR "<<nodeIdr<<std::endl;
    }}

当我这样做时,将调用receive回调,但这似乎是回送传输。 如果我更改ueNode.Get()程序SIGSEGV:

    Ptr<Socket> ns3UdpSocket = Socket::CreateSocket (ueNodes.Get(**0**), UdpSocketFactory::GetTypeId ());

谁能告诉我我可能做错了什么,以及将自定义数据包从一个ue发送到另一个ue需要什么?

提前谢谢您,并对格式表示歉意。 第一次发布。

1 个回复

对于感兴趣的任何人:我查看了udp-client.cc文件,并注意到-> SetAllowBroadcast设置为true。 此外,它似乎需要作为计划的事件运行。 这摆脱了错误,现在正在工作。 这是用于根据内容定制数据包的更新后的工作代码。

    uint16_t otherPort = 3000;
for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
{
    Ptr<ns3::Socket> srcSkt = Socket::CreateSocket(ueNodes.Get(u), tid);
    InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), otherPort);
    srcSkt->Bind (local);
    srcSkt->SetRecvCallback (MakeCallback (&ReceivePacket));
    if (u+1 < ueNodes.GetN ())
    {
        Ptr<Socket> ns3UdpSocket = Socket::CreateSocket (ueNodes.Get(u), tid);
        Ptr<Packet> pkt = Create<Packet> (reinterpret_cast<const uint8_t*> ("Packet Via (LTE simulating Safety)"), 39);
        InetSocketAddress remote = InetSocketAddress (ueIpIface.GetAddress(u+1), otherPort);
        ns3UdpSocket->Bind(remote);
        ns3UdpSocket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
        ns3UdpSocket->SetAllowBroadcast (true);
        ns3UdpSocket->Connect (remote);
        nodeInfo[u].sendSocketLTE=ns3UdpSocket;
        nodeInfo[u].sendSocketLTE=ns3UdpSocket;
    }
    else
    {
        Ptr<Socket> ns3UdpSocket = Socket::CreateSocket (ueNodes.Get(u), tid);
        Ptr<Packet> pkt = Create<Packet> (reinterpret_cast<const uint8_t*> ("Packet Via (LTE simulating Safety)"), 39);
        InetSocketAddress remote = InetSocketAddress (ueIpIface.GetAddress(u-1), otherPort);
        ns3UdpSocket->Bind(remote);
        ns3UdpSocket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
        ns3UdpSocket->SetAllowBroadcast (true);
        ns3UdpSocket->Connect (remote);
        nodeInfo[u].sendSocketLTE=ns3UdpSocket;
    }
}

我创建了一个结构来存储套接字,并在需要发送数据包nodeInfo [x] .ns3UdpSocket-> send(packet)时简单地调用它。 祝好运。

1 需要帮助理解 NS-3 中的特定代码

我是 ns-3 的新手,我正在尝试编辑示例third.cc 以进行简单的模拟。 但是我需要的数量超过指定的数量。 18 个 wifiStaNodes 。 但是我不明白这个代码片段来修改参数。 mobility.SetPositionAllocator ("ns3::GridPositionAl ...

3 我需要帮助理解 C 套接字编程中的绑定函数

我试图真正理解套接字,所以我正在用 C 语言学习它。这是服务器代码。 在bind函数中,这部分需要指定地址 我阅读了手册页,它确实说必须这样,代码也可以运行,但我不理解这种语法。 这部分代码发生了什么。 我知道*是用来声明指针的,&amp;是指变量的内存地址。 我只是不能把它们放在一起。 ...

4 NS-3套接字以连接到外部程序

我正在尝试一种写套接字类的方法,将我的NS-3模拟连接到外部程序。 因此,我要做的是在NS-3中创建数据包,然后通过此套接字将其发送到外部工具,对该工具中的数据包进行一些简单的操作,然后将其发送回NS-3。 我认为内置的NS-3插槽不能用于此目的。 有没有人遇到过类似的事情或有任何建议 ...

5 使用 python 在 ns3 中进行套接字编程

我用python编写了一段代码,用于在ns3中进行套接字编程。 在我的代码中,我可以看到源向接收器发送了一个数据包,但接收器不会响应接收数据包(实际上我相信“RecPkt”方法没有执行,但我不知道为什么)。 这是我的代码中与发送和接收数据包的方法相关的部分: 这是定义源和接收器的代码: ...

6 需要帮助理解循环

好吧,我想做的事情似乎相当简单,但它并没有按照我想要的方式工作。 我知道我只是没有得到什么。 本质上我试图读取控制台输入,将其分配给变量。 然后我想检查该变量以查看它是否是有效数字。 如果不是,我想告诉用户它无效并重新开始循环,直到我得到一个有效的数字,然后退出。 这是我的代码,请你帮 ...

2011-02-15 19:39:41 8 472   c#
8 需要帮助理解“DBWinMutex”

我正在使用这篇文章编写自己的 DebugView 版本: https ://www.codeproject.com/Articles/23776/Mechanism-of-OutputDebugString 作为起点。 该代码似乎工作正常。 但是我不明白命名互斥锁“DBWinMutex”的使用。 这 ...

9 需要帮助理解 ClassInstanceCreationExpression

我试图弄清楚 OOP 的一些概念,在 JavaDoc 中他们说: 一个对象是一个类实例或一个数组。 所以我试图弄清楚创建 Array 和实例化一个类之间的区别。 我知道你可以做一个这样的实例: :类名(参数); 是您在实例化过程中将参数传递给的构造函数。 同时,在 JavaDoc ...

10 需要帮助理解 Shadow DOM

阅读有关 Shadow DOM 的文章和教程,我发现了一个让我有点困惑的描述: “Shadow DOM 是指浏览器能够将 DOM 元素的子树包含到文档的渲染中,但不包含在主文档 DOM 树中。” 所以影子树不是 DOM 树的一部分? 但是浏览器仍然会看到它并呈现其内容? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM