OMNeT++中不同类型数据包之间的冲突

Conflicts between different types of packets in OMNeT++

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

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

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

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

您可能正在使用类似 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);
}