[英]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.