socket发送和接受tcp信息包格式的定义
2012-05-21 19:08
232 查看
socket发送和接受tcp信息包格式的定义
(2011-07-29 15:05:17)转载▼
标签:杂谈 | 分类: Delphi编程 |
数据包格式如下图所示,所包含的内容从左到右进行传输:包头中的信息全部为网络字节顺序!
序号 | 字段名称 | 长度(Bytes) | 类型(C++) | 字段说明 |
1 | head | 2 | Unsigned Short | 包头标识,固定为0xFFFF |
2 | version | 2 | Unsigned Short | 版本信息,当前为0x0030 |
3 | length | 2 | Unsigned Short | 包括包头的全部包体长度 |
4 | command | 2 | Unsigned Short | 命令号 |
5 | status | 4 | Unsigned Integer | 应答状态 |
6 | taskid | 4 | Unsigned Integer | 任务流水号 |
7 | sender | 4 | Unsigned Integer | 发送方标识1 |
8 | sessionid | 4 | Unsigned Integer | 发送方标识2 |
9 | timestamp | 4 | Unsigned Integer | 时间戳 |
10 | flag | 2 | Unsigned Short | 数据加密标志:0:不加密,1:DES加密 |
11 | reserved | 4 | Unsigned Integer | 保留字段 |
包体长度(length),提示整个包体(包括包头)的长度,接收方据此来完成一个业务数据包的接收和解析;
命令号(command),为客户端和服务器约定的业务命令,从0到65535,具体定义详见下表:
号码段 | 起始编号 | 结束编号 | 使用说明 |
1 | 0X0000 | 0X03E7 | 对应具体的业务命令号,如1为充值等 |
2 | 0X03E8 | 0XFFFF | 系统保留命令字,目前0XFFFE为心跳包,0XFFFF为心跳应答包 |
任务流水号(taskid)由自行定义,SP应用程序在响应包中必须返回,SP应用程序可以将此作为数据包一段时间内的唯一序列号。
发送方标识1(sender)、发送方标识2(sessionid)、时间戳(timestamp)以及保留字段(reserved),可以为发送方保留一些私有信息,返回包时原样返回。
包头信息中,除了包体长度(length)以外,其他的字段,包括开始标识(head),版本信息(version),任务流水号(taskid),发送方标识1(sender),发送方标识2(sessionid),时间戳(timestamp),以及数据加密标识(flag),需要在响应包中原样返回;
流程
1、通用网关在连接建立之后,根据刚才加密的字节流,加上信息包头,组合成信息包,然后发送(Send)信息包,发送的字节数为加密后的字节流字节数+24(24信息包头的字节长度);在上述的例子中,信息包大约如ffff0200 00001100 00004e5f 00114b3f 00000000 0100 0038 2fd65329e2770074791503c2dab1d209fe0225636dd07f7277bd291209e1a498df28f7af2f0eb4f1be2831f0fa8987b7f9;其中业务加密字节流的长度这里是56,体现在网络字节中是0x0038,如果是x86系列的PC,需要做主机到网络(ntohs)字节顺序转换;
2、SP应用服务程序接收(Recv)该信息包,根据包头信息截取对应的字节流,然后进行解密处理,得到加密前的业务字符串,另外还需要把其他的包头标识、两个包头保留字,存储在本地;
3、 SP应用服务程序根据流程开发人员与之协商好的格式对接收的字符串进行解析,然后进行响应的处理
4、 SP应用服务程序在发送之前,同样根据密匙对该返回字符串进行加密处理,然后对加密字节流长度进行计算,加上刚才发送过来的包头标识和版本号以及保留字等,组合成信息包;注意这时,字节流的长度是返回加密字节流的长度,而且是网络字节的。
相关文章推荐
- socket服务端,记录接受客户端发送的请求信息
- C#.net同步异步SOCKET通讯和多线程总结(5)tcp发送和接受的代码
- tcp socket发送缓冲区、接受缓冲区、滑动窗口协议之间的关系
- 简析TCP的三次握手与四次分手(TCP协议头部的格式,数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端)good
- 关于socket应用:一个不断监听一个进程的服务器以及发送信息的客户端 TCP的三次握手和四次挥手
- 【iOS】Socket/TCP 通信 发送 NSString 字符串格式数据
- tcp socket的发送与接收缓冲区 .
- 如何通过socket发送和接受dataset数据集(C#)
- TCP与UDP的简单发送与实现(socket)
- Unity 3D Protobuf的使用 信息的简单发送 并在Java服务器上接受显示
- socket 发送信息和接收信息 多用于银行通信
- Socket编程 (连接,发送消息) (Tcp、Udp) - Part1
- socket 编程入门教程(一)TCP server 端:7、接收与发送
- 如何通过Socket TCP发送并接收一个文件?
- Socket发送信息
- socket发送请求包格式
- 手机连接设备的蓝牙向其发送子服务器局域网IP信息,从而esp8266与该服务器建立tcp连接
- GCDAsyncSocket实现TCP连接怎么设置发送数据延时
- C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全