我已经在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);
}