【问题标题】:Conflicts between different types of packets in OMNeT++OMNeT++中不同类型数据包之间的冲突
【发布时间】:2015-08-07 16:50:56
【问题描述】:

我在 OMNeT++ 中创建了一个模拟 我有一个客户端和一个服务器(它们都是 UDPBasicApp 模块)。客户端发送数据包 到服务器。服务器还向客户端发送数据包,这是 cPacket 的两个子类。

很遗憾,这两种类型的数据包之间存在冲突 当客户收到它们时。我们假设这两个数据包的类型被称为 FirstPacket 和 SecondPacket 分别(从 cPacket 派生的类)。通过运行模拟,一旦客户端收到第一个 来自服务器的数据包模拟崩溃,我收到类似以下错误消息:

"check_and_cast(): cannot cast (FirstPacket*).ClientServer.client.udpApp[0] to type SecondPacket"

我该如何解决这个问题?服务端如何成功接收客户端发送的两种类型的数据包?

【问题讨论】:

    标签: c++ networking omnet++


    【解决方案1】:

    您可能正在使用类似SecondPacket* p = check_and_cast<SecondPacket*>(pkt); 的东西来强制将每个传入数据包视为SecondPacket 类型。如果不是这种情况,OMNeT++ 的check_and_cast 将中止您的模拟。一个简单的解决方案是改用dynamic_cast

    PacketTypeA* a = dynamic_cast<PacketTypeA*>(pkt);
    PacketTypeB* b = dynamic_cast<PacketTypeB*>(pkt);
    if (a) {
      printf("got packet type A: %d", a->some_field_of_a);
    }
    if (b) {
      printf("got packet type B: %d", b->some_field_of_b);
    }
    

    【讨论】:

    • 非常感谢。我试过你说的,效果很好。
    猜你喜欢
    • 1970-01-01
    • 2017-04-25
    • 2023-02-09
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    相关资源
    最近更新 更多