请教下关于 socket 设备通信自定义报文格式的开发问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tom
V2EX    问与答

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

  •  
  •   tom 2018-07-09 10:18:42 +08:00 2347 次点击
    这是一个创建于 2655 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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


    另外反过来发是啥意思啊,0x68,反过来是 86x0 吗?
    234235
        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。
    不管数据长度是多少,究竟是先发高位还是先发低位,都要看协议里的要求,比如你这个里面表地址就是要求先发高位。
    还有如果数据只有八位是不存在高低字节的,就按正常的发,只有数据超过八位了,会涉及这个问题,你需要把数据拆成多个八字节的数据来发送。
    234235
        4
    234235  
       2018-07-09 10:59:23 +08:00   1
    最好是先让对方给你单独开一台测试设备,你用 socket 往上面发消息,看服务器的回复,每个指令都试几次,再开始写协议。特别注意的就是数据长度,包类型和校验位。还有如果你不太熟悉进制转换的话,也要注意进制的问题。
    tom
        5
    tom  
    OP
       2018-07-09 11:28:02 +08:00
    @234235 #4 谢谢谢谢!那我研究研究。
    tom
        6
    tom  
    OP
       2018-07-09 11:32:45 +08:00
    @234235 #4 再多请教一句,设备是有了,但是这设备是直接插个 sim 卡,然后自动就连接对方的服务器了,我干预不了,也拿不到对方的服务器。我看这板子上有个接口,能用线连接到我的电脑直接发指令吗?如果能的话应该用什么样的线?谢谢
    tom
        7
    tom  
    OP
       2018-07-09 11:33:04 +08:00
    234235
        8
    234235  
       2018-07-09 12:30:23 +08:00
    看你协议里写的,这好像是个远程抄表的?
    不知道你是想拿来做什么,如果只是想用相同的协议和服务器通信的话,直接在电脑上开个 TCP 连接到服务器就行,不过你得知道服务器的 IP 和端口号,还有设备的的 ID,就是那个表地址。
    如果你是要破解这个板子,那就有点复杂了,不是很容易能说请了。不知道你有没有 USB 转 TTL 的接口板。
    tom
        9
    tom  
    OP
       2018-07-11 20:44:10 +08:00
    @234235 #8 对,是远程抄表,不破解板子,现在设备有了,设备也能连接到我的服务器,设备给服务器发信息或者图片,服务器给回信息。
    tom
        10
    tom  
    OP
       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
        11
    234235  
       2018-07-12 09:28:52 +08:00
    @tom #10 直接取低八位就 ok 了。C0 加到 00 一共是 0x025E,取低八位 5E。
    你直接用八位变量来加,溢出的自动丢掉就行了。
    关于     帮助文档     自助推广系统     博客     API/a>     FAQ     Solana     5926 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 170ms UTC 02:38 PVG 10:38 LAX 19:38 JFK 22:38
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86