首页 新闻 会员 周边

通讯协议解析

0
悬赏园豆:100 [已解决问题] 解决于 2012-04-13 20:58

由于我的项目中需要与硬件设备通讯,注定要碰到许多下位机的通信协议。现在碰到一个问题,请教各位大牛。

我的网络服务端会接收许多数据,有时候会出现几种协议的数据包粘在一起,无法区分开来。有些协议的数据是有头有尾的,有些协议的数据是只有头,还有些没头没尾,这些没头没尾的里面可能会是一些扫描工具发的数据包,也就是无用数据。

我的想法是,做一个协议路由模块或者协议自适应模块,对接收到的数据进行处理。但是没有任何头绪,请各位大牛帮忙。

 

园豆不多,意思一下,谢谢各位的参与与解答。

哑吧湖大水怪的主页 哑吧湖大水怪 | 初学一级 | 园豆:13
提问于:2012-01-09 18:48
< >
分享
最佳答案
0

很典型的策略模式啊~

按照预置的协议策略来解析数据包,如果成功,则匹配成功;否则采用下一个协议策略~

如果都没有成功的,则说明不支持当前数据包,在人工分析后,增加相应的协议策略即可(策略可用通过配置文件生成)

收获园豆:40
咖啡色 | 菜鸟二级 |园豆:208 | 2012-01-10 16:56

目前情况下,我是按照这个思路来的,但是这地方会成为一个瓶颈,我目前的想法是在这种方案上改进

哑吧湖大水怪 | 园豆:13 (初学一级) | 2012-01-11 11:36

@ㄟ荖樹炪厊ㄖ: 

都是慢慢完善啊,哪有完美的系统~

你看哪个产品不是beta,然后betaA,betaB。。。

等到某天你积累了相当规模的策略,就能应付大部分设备了~

咖啡色 | 园豆:208 (菜鸟二级) | 2012-01-11 17:57
其他回答(5)
0
收获园豆:20
LCM | 园豆:6876 (大侠五级) | 2012-01-09 19:03

谢谢,这篇文章我之前就已经看过了,对于我的问题,它基本上没有多大意义。由于接收到的数据根本不知道是什么类型的数据,所以用流的形式来读取并指定到某个类对象上,无法操作。

支持(0) 反对(0) 哑吧湖大水怪 | 园豆:13 (初学一级) | 2012-01-09 19:16
0

请问楼主发送过来的数据是不是一件固定化了,如果没固定化,为什么不多加一个标志位指示什么类型消息呢?另外能不能具体情况说一下呢?

收获园豆:10
软件哲学 | 园豆:406 (菜鸟二级) | 2012-01-10 09:16

硬件设备发送的数据包

支持(0) 反对(0) 哑吧湖大水怪 | 园豆:13 (初学一级) | 2012-01-10 09:26
0

你的硬件应该有接收和发送的协议的数据包的格式吧;你接收数据时,按你的协议去解析数据;就行了;最主要的是你理解协议就ok了;或和供应商联系让他们提供一个你使用的语言的一个demo;

收获园豆:10
画方软件 | 园豆:778 (小虾三级) | 2012-01-10 10:32

恩,理想情况下是这样子的

支持(0) 反对(0) 哑吧湖大水怪 | 园豆:13 (初学一级) | 2012-01-10 16:42

@ㄟ荖樹炪厊ㄖ: 这个需要你努力呀;你需要什么,开发过程中遇到的问题都应该有直接的负责人吧;直接找厂家要demo;硬件不是你们生产的吧;是的话就更好了了;硬件开发是比较容易的问题是协议的理解;

支持(0) 反对(0) 画方软件 | 园豆:778 (小虾三级) | 2012-01-10 16:44

@HuaFang: 有自己生产的硬件,也有其它产家的硬件,杯具的就是协议不统一,痛苦中~

支持(0) 反对(0) 哑吧湖大水怪 | 园豆:13 (初学一级) | 2012-01-11 11:35
0

每个包头必须设定标识位来区分协议类型,然后将数据包交给不同的协议解析器来解析

收获园豆:10
潇湘雨歇 | 园豆:207 (菜鸟二级) | 2012-01-11 11:28

有些数据就是没头没尾的。。。

支持(0) 反对(0) 哑吧湖大水怪 | 园豆:13 (初学一级) | 2012-01-11 11:36
0

如果收到的数据没有一个统一的标识的话 那也没办法搞啊是不是一个设备建立了一个连接呢?

收获园豆:10
傻瓜力量大 | 园豆:260 (菜鸟二级) | 2012-01-30 17:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册