我已经在 OMNeT++ 中创建了一个模拟 我有一个客户端和一个服务器(它们都是 UDPBasicApp 模块)。客户端发送数据包 到服务器。服务器也向客户端发送数据包,这是cPacket的两个子类。
不幸的是,这两种数据包之间存在冲突 当客户收到它们时。我们假设这两个数据包的类型称为 分别为 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);
}
关于c++ - OMNeT++中不同类型数据包之间的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31869015/