因为我之前从来没接触过硬件通信方面的开发,所以对于这方面一窍不通,头大。而且由于种种原因,协议提供方仅仅提供了协议,其他一概没有。 我想请教一下,如果我用 Java 的话,如果根据下面截图的协议格式来实现一个服务端和客户端? 那些 “引导 68 ” “ LL HL ” “ AFN ” 都是啥意思?
1
234235 2018-07-09 10:28:09 +08:00 1
引导 68 就是十六进制 0x68
LL HL 下面标注了,就是有效数据的总长度乘 4,看起来是发两遍?而且低字节在前,反过来发。注意都是按照十六字节 AFN 下面标注查表,应该是标识数据包类型之类的关键字了,对方应该有给你表的。 |
3
234235 2018-07-09 10:52:10 +08:00 1
对,看起来 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。 不管数据长度是多少,究竟是先发高位还是先发低位,都要看协议里的要求,比如你这个里面表地址就是要求先发高位。 还有如果数据只有八位是不存在高低字节的,就按正常的发,只有数据超过八位了,会涉及这个问题,你需要把数据拆成多个八字节的数据来发送。 |
4
234235 2018-07-09 10:59:23 +08:00 1
最好是先让对方给你单独开一台测试设备,你用 socket 往上面发消息,看服务器的回复,每个指令都试几次,再开始写协议。特别注意的就是数据长度,包类型和校验位。还有如果你不太熟悉进制转换的话,也要注意进制的问题。
|
6
tom OP @234235 #4 再多请教一句,设备是有了,但是这设备是直接插个 sim 卡,然后自动就连接对方的服务器了,我干预不了,也拿不到对方的服务器。我看这板子上有个接口,能用线连接到我的电脑直接发指令吗?如果能的话应该用什么样的线?谢谢
|
7
tom OP |
8
234235 2018-07-09 12:30:23 +08:00
看你协议里写的,这好像是个远程抄表的?
不知道你是想拿来做什么,如果只是想用相同的协议和服务器通信的话,直接在电脑上开个 TCP 连接到服务器就行,不过你得知道服务器的 IP 和端口号,还有设备的的 ID,就是那个表地址。 如果你是要破解这个板子,那就有点复杂了,不是很容易能说请了。不知道你有没有 USB 转 TTL 的接口板。 |
9
tom OP @234235 #8 对,是远程抄表,不破解板子,现在设备有了,设备也能连接到我的服务器,设备给服务器发信息或者图片,服务器给回信息。
|