You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

INET框架自定义CbdProto网络层协议出现Unknown protocol报错如何解决

错误根因

该报错由节点的MessageDispatcher(消息调度器)无法识别自定义的CbdProto协议导致,调度器找不到协议对应的接收模块,因此抛出未知协议异常。

解决步骤

  1. 修正协议注册逻辑,不要自定义ProtocolNew类
    INET的协议识别依赖全局共享的Protocol类注册表,单独定义的ProtocolNew子类实例不会被内置调度器识别,需要直接基于INET原生Protocol类注册自定义协议:
  • ProtocolNew.h代码修改为:
namespace inet {
extern const Protocol CbdProto;
}
  • ProtocolNew.cc代码修改为:
namespace inet {
Register_Protocol(CbdProto, "CbdProto", Protocol::NetworkLayer);
}

使用INET内置的Register_Protocol宏注册,才能将协议加入全局注册表,被MessageDispatcher正常识别。

  1. 绑定传输层到自定义协议
    当前使用的UDP模块默认向IP协议发包,需要修改配置告知UDP使用CbdProto作为下层网络协议,在ini配置中添加如下配置项:
**.udp.networkProtocol = "CbdProto"
  1. 补充SimpleNetworkLayer协议映射
    确保SimpleNetworkLayer配置了正确的协议对应关系,在ini配置中补充如下配置项:
**.generic.networkProtocol = "CbdProto"
  1. 校验协议注册参数
    现有initialize方法的注册阶段(INITSTAGE_NETWORK_LAYER)符合要求,需要确保registerProtocol方法传入的协议实例为全局注册表中注册的Protocol::CbdProto,而非自定义的ProtocolNew实例,否则调度器会匹配失败。

内容的提问来源于stack exchange,提问作者Gérard KPONHINTO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:09:01