目前我使用VC程序跟WEB(java开发)进行通讯,用TCP通讯。目前定义的命令就7位长,有效内容用空格分开,举例,使用AAA BBB CCCC D EE FFFFF GGG,使用第一个字段决定包的内容。目前内容定义总数就13个,命令也就6个。但是将来会扩展。WEB为了拆包快决定将每个字段占一个位置,也就是将包改为13个字段,无效的就用NULL表达,例如上面的命令就会变为AAA NULL NULL BBB CCCC NULL NULL D EE FFFFF NULL NULL GGG.但是将来内容会增加,为了WEB不容易溢出范围,WEB定170个包长。也就是我得在上面的包的基础上再加153个NULL。我这边也要收包的,也要收WEB发的同样的包。WEB说他那样解包快。170包长有可能不够,到时候还得扩展。如果用前一种方法,就只传该命令用到的数据。我想请问大家原来的只传用到的做法合理,还是WEB的后一种办法不管有没有用照固定格式船速合理。

解决方案 »

  1.   

    肯定是只传用到的合理啊,现在不仅仅是web处理方便和快速的问题(web我不很清楚),还有流量的问题,加了那么多的NULL来传太浪费资源。我个人理解web端也不必非得处理固定大小的包,这样可能方便但肯定不合理。很少有这样做的了,况且将来还有扩展,所以就更不能是固定大小的数据包了,可变的数据包是最好的了,我们公司现在也是终端和服务器通讯,定的协议的数据包都是可变大小的,有专门的字段表示长度。
      

  2.   

    我们公司之前VC与java通讯也是用SOCKET的,后来改成Webservice了
      

  3.   

    协议有头,有结尾,有校验(可有可无),数据则是用到多少发多少,就用你提到的空格隔开也行
    $HEAD AAA BB DD*<校验><0X0D><0x0A>
      

  4.   

    按位字节流可以去做。
    1010111(对应的十六进制0x57)(这里是二进制,这里为7位,表示分别表示你的7个命令)
    第一个1表示AA
    第二个0表示BB,无效或者未使用

      

  5.   

    可以啊,是模仿 NEMA 0183协议,可以用红色部分来表示数据类型
    $GPGGA,103244.00,3911.4805,N,11901.3956,E,2,08,1.0,16.7,M,0.3,M,9.8,0605*4B