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

标签 c++ networking omnet++

我已经在 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/

相关文章:

javascript - 使用 JavaScript 中的自定义请求 header 导航到 URL

omnet++ - handleParkingUpdate() 到底做了什么?

ini - 无法打开ini文件 `omnetpp.ini'

c++ - 难以结合 GP 和 OOP 概念

c++ - 有什么方法可以处理从 c++ 中调用的 c# exe 抛出的异常?

linux - 如何在 Linux 上测试自定义 TCP 实现?

c++ - 如何在 omnet++ 中的模块上单独调用 finish()

c++ - 为什么这段代码不能编译?

c++ - 析构函数——我应该使用 delete 还是 delete[]?

Java套接字缓冲区问题