【问题标题】:ns-3 wlan grid TCP not working while UDP isns-3 wlan grid TCP 不工作,而 UDP 是
【发布时间】:2014-05-15 16:38:31
【问题描述】:

我正在尝试在 ns-3 中设置多跳 AdHoc 802.11g 网络。
首先,我使用了示例“wifi-simple-adhoc-grid.cc”。

该示例使用 UDP,但我想使用 TCP。所以我换了

TypeId tid = ns3::UdpSocketFactory::GetTypeId();
Ptr<Socket> recvSink = Socket::CreateSocket (c.Get (sinkNode), tid);
InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 80);
recvSink->Bind (local);
recvSink->SetRecvCallback (MakeCallback (&ReceivePacket));

TypeId tid = ns3::TcpSocketFactory::GetTypeId();
Ptr<Socket> recvSink = Socket::CreateSocket (c.Get (sinkNode), tid);
InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 80);
recvSink->Bind (local);
recvSink->SetRecvCallback (MakeCallback (&ReceivePacket));

Ptr<Socket> source = Socket::CreateSocket (c.Get (sourceNode), tid);
InetSocketAddress remote = InetSocketAddress (i.GetAddress (sinkNode, 0), 80);

发送数据包没有问题,但从未调用过 ReceivePacket,这意味着套接字 Sink 没有接收到数据包。

完整代码:https://gist.github.com/3023757

Routes output 作者:

Ptr<OutputStreamWrapper> routingStream = Create<OutputStreamWrapper> 
("wifi-multihop.routes", std::ios::out)

【问题讨论】:

  • 我遇到了同样的问题 - 我给 SetRecvCallback 的回调永远不会被调用,即使数据被发送到节点。
  • 下面提供的解决方案有效吗?我从您提供的链接中获取了您的代码,并按照答案中给出的建议运行它,但未显示 TCP 数据包已收到。

标签: tcp wifi network-protocols ns-3


【解决方案1】:

您可以在 SetAcceptCallback 函数中调用 SetRevCallback 函数。

明确地,

recvSink->SetAcceptCallback (MakeNullCallback<bool, Ptr<Socket>,const Address &> (),MakeCallback(&accept));

在接受函数中

void accept(Ptr<Socket> socket,const ns3::Address& from)
{

    std::cout<<"Connection accepted"<< std::endl;
    socket->SetRecvCallback (MakeCallback (&ReceivePacket));

}

【讨论】:

  • 嗨@user75176,感谢您的贡献,请正确格式化您的答案。您可能会发现这个help 很有用。
猜你喜欢
  • 2010-10-16
  • 2010-09-26
  • 2019-05-08
  • 2013-04-04
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
相关资源
最近更新 更多