簡體   English   中英

OMNeT ++中不同類型數據包之間的沖突

[英]Conflicts between different types of packets in 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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM