NS3中Socket的HandleRead回调从未触发问题求助
基于NS3的V2V聚类程序Hello消息无法送达问题求助
我耗时多日排查仍未解决问题,特来求助。我的应用是基于NS3的开源聚类程序,运行无报错且有日志输出,但所有*簇头(CH)*的邻居数始终为0,这表明Hello消息未送达节点,每个节点因未发现邻居而自认为是簇头。
每个节点(车辆)拥有两个Socket:用于发送数据的m_socket和用于监听的m_socketListening,相关代码如下:
发送Socket创建代码
if (!m_socket) { TypeId m_tid = TypeId::LookupByName("ns3::UdpSocketFactory"); m_socket = Socket::CreateSocket(GetNode(), m_tid); if (Inet6SocketAddress::IsMatchingType(m_peer)) { m_socket->Bind6(); } else if (InetSocketAddress::IsMatchingType(m_peer) || PacketSocketAddress::IsMatchingType(m_peer)) { m_socket->Bind(); } m_socket->SetAllowBroadcast(true); m_socket->ShutdownRecv(); m_socket->SetConnectCallback( MakeCallback(&V2vControlClient::ConnectionSucceeded, this), MakeCallback(&V2vControlClient::ConnectionFailed, this)); m_socket->Connect(m_peer); }
监听Socket创建代码
if (!m_socketListening) { NS_LOG_UNCOND("\n ...creating socket muhsen..."); m_socketListening = Socket::CreateSocket(GetNode(), m_tidListening); m_socketListening->Bind(m_peerListening); m_socketListening->Listen(); m_socketListening->ShutdownSend(); if (addressUtils::IsMulticast(m_peerListening)) { Ptr<UdpSocket> udpSocket = DynamicCast<UdpSocket>(m_socketListening); if (udpSocket) { // equivalent to setsockopt (MCAST_JOIN_GROUP) udpSocket->MulticastJoinGroup(0, m_peerListening); } else { NS_FATAL_ERROR("Error: joining multicast on a non-UDP socket"); } } } m_socketListening->SetRecvCallback(MakeCallback(&V2vControlClient::HandleRead, this)); m_socketListening->SetAcceptCallback( MakeNullCallback<bool, Ptr<Socket>, const Address &>(), MakeCallback(&V2vControlClient::HandleAccept, this)); m_socketListening->SetCloseCallbacks( MakeCallback(&V2vControlClient::HandlePeerClose, this), MakeCallback(&V2vControlClient::HandlePeerError, this)); void V2vControlClient::HandleRead (Ptr<Socket> socket) { NS_LOG_UNCOND("\n this message is never executed.."); NS_LOG_FUNCTION (this << socket); Ptr<Packet> packet; Address from; while ((packet = socket->RecvFrom(from))) { if (packet->GetSize() == 0) { //EOF break; } } }
运行程序时,HandleRead函数内的NS_LOG_UNCOND日志从未打印,说明该回调从未被执行,恳请各位提供帮助!
内容的提问来源于stack exchange,提问作者Muhsen
相关产品推荐
相关产品推荐

