c - C语言的有限状态机编译器模拟网络协议(protocol)

标签 c network-protocols fsm ragel scxml

我一直在寻找一个好的状态机编译器来测试一些自定义网络协议(protocol)。我已经查看了一些工具,例如 Yakindu、Ragel(编译器)、SCXML(语言),但我不确定它们是否可以用于网络协议(protocol)。

SCXML(language) 看起来不错,但我找不到任何专门用于 C 的编译器(scxmlcc 用于 C++)。有谁知道基于 SCXML 的 C 编译器? Yakindu 工具看起来很有前途,但我不确定是否可以测试像 BGP/OSPF 这样的网络协议(protocol)。任何人都可以就此提出任何指示吗? Ragel 看起来也不错,但我再次不确定是否可以使用此编译器生成复杂的网络协议(protocol)客户端。

我特别提到网络协议(protocol)的原因是我还希望能够执行自定义例程,例如 packet_create/packet_send(具有自定义数据包大小)等作为“事件”发生后“操作”的一部分。

我是否需要始终从状态图中生成代码,或者是否有直接与状态交互的方法? 我对 FSM 很陌生,任何帮助/建议/建议/链接都将不胜感激。

最佳答案

默认Yakindu SCT C 代码生成器生成与具体执行环境无关的纯 C 代码。这意味着您将获得一段标准 C 代码,您可以手动将其集成到您自己的应用程序中。这种手动集成意味着在您的应用程序和状态机之间映射事件、操作和变量。此外,您必须正确触发状态机执行。

您可以在 user guide 中找到一些相关信息.您还可以自定义代码生成器以满足您的需求,但只有当应用程序的集成看起来总是一样并且您想要集成一个或两个以上的状态机时,这才有意义。

因此,如果您提供有关应用程序端 API 的更多信息,我可以提供一些如何与状态机集成的提示。

关于c - C语言的有限状态机编译器模拟网络协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29466310/

相关文章:

c - C 7 中意外标记 '(' 附近的语法错误

c - 在c中生成url并发布数据

linux - 什么是 "internet protocol, pseudo protocol number"?

.net - 用于实时消息动态客户端列表的最佳技术

algorithm - 使用自然语言生成解读句子中的单词

Python 转换 : how to map all possible transitions of an FSM to a graph

c - 如何在 C 中的进程完成后跟踪子进程使用的内存

c - 从文本文件读取时无限循环

蓝牙协议(protocol)?

javascript - 有限状态机解析