请教下关于 socket 设备通信自定义报文格式的开发问题

2018-07-09 10:18:42 +08:00
 tom

因为我之前从来没接触过硬件通信方面的开发,所以对于这方面一窍不通,头大。而且由于种种原因,协议提供方仅仅提供了协议,其他一概没有。 我想请教一下,如果我用 Java 的话,如果根据下面截图的协议格式来实现一个服务端和客户端? 那些 “引导 68 ” “ LL HL ” “ AFN ” 都是啥意思?

1815 次点击
所在节点    问与答
11 条回复
234235
2018-07-09 10:28:09 +08:00
引导 68 就是十六进制 0x68
LL HL 下面标注了,就是有效数据的总长度乘 4,看起来是发两遍?而且低字节在前,反过来发。注意都是按照十六字节
AFN 下面标注查表,应该是标识数据包类型之类的关键字了,对方应该有给你表的。
tom
2018-07-09 10:39:00 +08:00
@234235 #1 多谢多谢!
应该是这个表吗?


另外反过来发是啥意思啊,0x68,反过来是 86x0 吗?
234235
2018-07-09 10:52:10 +08:00
对,看起来 AFN 确实是指代数据包类型,接口检测是 0x02,后面应该还有其他的包 0x03、0x04 等,你看下面的例子,服务器下发给你的 AFN 也是 0x02。
看来你对十六进制理解的不透彻啊,还是看他给你的这个例子吧,开头是 68 60 00 60 00,这两遍 60 00 就是这个包从控制域 C0 到倒数第三个 TP 位 00 的总长度十进制 24*4=96 转为十六进制就是 0x60,数据包里的长度是十六位的,所以这个包的长度就是 0x0060,高八位是 00,低八位是 60,数据包里要求低字节在前,所以发送时候就是 60 00。
不管数据长度是多少,究竟是先发高位还是先发低位,都要看协议里的要求,比如你这个里面表地址就是要求先发高位。
还有如果数据只有八位是不存在高低字节的,就按正常的发,只有数据超过八位了,会涉及这个问题,你需要把数据拆成多个八字节的数据来发送。
234235
2018-07-09 10:59:23 +08:00
最好是先让对方给你单独开一台测试设备,你用 socket 往上面发消息,看服务器的回复,每个指令都试几次,再开始写协议。特别注意的就是数据长度,包类型和校验位。还有如果你不太熟悉进制转换的话,也要注意进制的问题。
tom
2018-07-09 11:28:02 +08:00
@234235 #4 谢谢谢谢!那我研究研究。
tom
2018-07-09 11:32:45 +08:00
@234235 #4 再多请教一句,设备是有了,但是这设备是直接插个 sim 卡,然后自动就连接对方的服务器了,我干预不了,也拿不到对方的服务器。我看这板子上有个接口,能用线连接到我的电脑直接发指令吗?如果能的话应该用什么样的线?谢谢
tom
2018-07-09 11:33:04 +08:00
234235
2018-07-09 12:30:23 +08:00
看你协议里写的,这好像是个远程抄表的?
不知道你是想拿来做什么,如果只是想用相同的协议和服务器通信的话,直接在电脑上开个 TCP 连接到服务器就行,不过你得知道服务器的 IP 和端口号,还有设备的的 ID,就是那个表地址。
如果你是要破解这个板子,那就有点复杂了,不是很容易能说请了。不知道你有没有 USB 转 TTL 的接口板。
tom
2018-07-11 20:44:10 +08:00
@234235 #8 对,是远程抄表,不破解板子,现在设备有了,设备也能连接到我的服务器,设备给服务器发信息或者图片,服务器给回信息。
tom
2018-07-11 20:49:29 +08:00
@234235 #8 又有个问题想请教您一下,第一张图上有说 “ CS 是从控制域开始到 TP 的累加和”,现在设备给传过来的数据转成 16 进制字符串:

68 60 00 60 00 68 C0 02 12 77 40 01 00 05 02 00 00 00 04 00 20 18 07 11 11 13 53 00 00 00 5E 16

按说明应该是从 C0 一直加到 00,加在一起等于 5E。5E 的十进制等于 94,可是前面那些十六进制我转成十进制再加一块远大于 94。

这到底是怎么个加法?
234235
2018-07-12 09:28:52 +08:00
@tom #10 直接取低八位就 ok 了。C0 加到 00 一共是 0x025E,取低八位 5E。
你直接用八位变量来加,溢出的自动丢掉就行了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/469189

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX