我想做个socket通信程序,不知道怎么设计通信协议,自己写的感觉太差劲,想请教下有没有哪位大神专业一点指导下,或者应该参考下什么书籍呢?
你要做什么?
又不是喊你做通讯调制调解,不需要好多的专业性。
你可以借鉴一些通讯案列,然后按照自己的需求抉择单工or双工。
封包无非头、body、校验一类信息,这个也是根据需求来抉择。
其实作为自己写通讯,上面都是可以不要的,比如你可以基于wcf、mq、zmq之类的,然后只需对body进行封包即可,而body封包你可以使用现成的soap,或者json,或protobuff等,就能达成你说想要的。
学个标准的。比如Modelbus
目录
1 协议描述... 4
数据类型和格式定义... 5
1.1 数据类型定义... 5
1.2 包格式概述... 5
1.3 包格式布局... 5
2 通信接口包格式定义... 6
2.1 网络连接状态(心跳包)检测... 6
2.1.1 网络连接状态查询语法(由设备发给Server端) 6
2.1.2 网络连接状态查询应答语法(由Server发给设备) 6
2.2 设备认证... 6
2.2.1 公话认证(由设备发给Server端) 6
2.2.2 公话认证应答(由Server发给设备) 6
3 参数取值定义... 7
3.1 功能号(func_no)取值... 7
1 协议描述
(1).设备与管理平台进行数据通讯。本质上是基于TCP/IP协议之上的应用层协议,以TCP协议进行数据传输,采用请求/应答的同步通讯模型实现。
(2).本协议实现的业务功能:
l 宿舍人脸识别签到
1.1 数据类型定义
类型 |
说明 |
String |
字符串。左齐右补空格(ASCII码0x20),字符串的最后一字符不可为空格。 |
n[String] |
n个长度相同的字符串 |
Integer |
定长字符串, 它由一系列的10进制字符组成(‘0’---‘9’),右齐左补‘0’(ASCII码0x30)。 |
Date |
8位定长String,格式:YYYYMMDD |
DateTime |
14位定长String,格式:YYYYMMDDHHMISS |
Binary |
二进制数据 |
1.2 包格式概述
包格式 |
|||
头 |
体 |
||
包长度 |
功能号 |
序列号 |
包内容 |
4 |
2 |
4 |
=(包长度– 10) |
1.3 包格式布局
下面是一个完整包格式的布局:
|
包格式 域 |
长度 |
类型 |
说明 |
头 |
包长度 |
4 |
Integer |
此域表示消息包的长度(包含信息头长度),包格式的最大包体长度为9999字节 |
功能号 |
2 |
String |
取值参照第3.1节 |
|
序列号 |
4 |
Integer |
本协议使用在异步通信模式下,此域由消息发起者设定,应答者对应给回此序列号。 序列号范围:0001-9999,循环使用。 |
|
体 |
包内容 |
|
Multi |
包格式里必须包含的参数 |
2 通信接口包格式定义
2.1 网络连接状态(心跳包)检测
2.1.1 网络连接状态查询语法(由设备发给Server端)
序号 |
域名 |
长度 |
类型 |
描述 |
1 |
xt_datetime |
14 |
Datetime |
设备的当前时间 |
2.1.2 网络连接状态查询应答语法(由Server发给设备)
序号 |
域名 |
长度 |
类型 |
描述 |
1 |
valid_flag |
1 |
Integer |
1 成功接收到 |
注:当信道上没有数据传输时,通信双方应每隔时间C发送链路检测包以维持此连接,连续发送N-1次后仍未得到响应则断开此连接。现阶段建议取值为:C=1分钟,T=60秒,N=4。
2.2 设备认证
2.2.1 设备认证(由设备发给Server端)
序号 |
域名 |
长度 |
类型 |
描述 |
1 |
DeviceId |
18 |
String |
公话ID |
2 |
Reserved |
8 |
String |
保留 |
2.2.2 设备认证应答(由Server发给设备)
序号 |
域名 |
长度 |
类型 |
描述 |
1 |
valid_flag |
1 |
Integer |
1:认证成功 0:认证失败 |
2.3 识别信息
2.3.1 信息发送(由Server发给设备端)
序号 |
域名 |
长度 |
类型 |
描述 |
1 |
count |
2 |
Integer |
发送的姓名数量 |
2 |
Name |
12 |
N[String] |
姓名 |
3 |
Reserved |
8 |
String |
保留 |
注:发送时,包头的序列号全部默认为0000,该条信息不需要返回
3 参数取值定义
3.1 功能号(func_no)取值
功能 |
取值 |
设备认证 |
01 |
网络连接状态查询 |
02 |
识别信息 |
03 |
前几天刚做的一个安卓与服务器通信的协议
写的挺好,搜藏了。