通信基础(网络层)
> 本文档描述了如何建立TCP网络通信以及通过TCP发送的数据的具体格式
## 物理网络
优先考虑使用有线网络,在该项目阶段,无需进行实时音视频的实际传输,使用无线网络亦可。
## TCP服务器/客户端 IP地址和端口
通信双方为由`未知数字`开发的UI交互系统、由`均胜`开发的多模交互系统,**约定**
* `未知数字`侧系统作为TCP服务器
* `均胜`侧系统作为TCP客户端
TCP服务器IP由现场网络决定,**约定**
* 优先使用固定IP地址:`192.168.100.100`
TCP服务器通信端口,**约定**
* 使用端口:20001
## 数据帧(消息)格式
通信双方建立Socket通信后,以`消息(Message)`为单位,进行数据交换,每个`消息`为一个`JSON格式字符串`,`JSON格式字符串`举例:
```json
{
"id": "098aea35-77fb-4313-894b-3ce1e6861276",
"ts": 1634875937,
"tp": 0,
"ev": 0,
"da": {
"message": "自定义数据"
}
}
```
**约定**
* 使用字符编码:UTF-8
## 数据报文格式
TCP协议为基于流的传输协议,在实际发送`消息`时,应当先将`消息`封装成`数据报文(datagram)`,然后才用Socket API发送`数据报文`。
报文结构如下图所示:

* 报文头部包含一个标识符`0xFE`表示报文开始
* 紧接着报文开始标识符是一个4字节的无符号整数(字节序为小端序),这个整数代表Body的长度(字节数)
* 报文头部后面是报文体,报文体即为一个`消息`字符串编码(字符编码为UTF-8)
* 报文尾部包含一个EOT字节