`

socket发送和接受tcp信息包格式的定义

    博客分类:
  • java
 
阅读更多

下面为信息包的格式和内容

数据包格式如下图所示,所包含的内容从左到右进行传输:包头中的信息全部为网络字节顺序!

序号

字段名称

长度(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

保留字段

包头信息中,开始标识(head),版本信息(version)为固定格式;

包体长度(length),提示整个包体(包括包头)的长度,接收方据此来完成一个业务数据包的接收和解析;

命令号(command),为客户端和服务器约定的业务命令,从0到65535,具体定义详见下表:

号码段  

起始编号

结束编号

使用说明

1

0X0000

0X03E7

对应具体的业务命令号,如1为充值等

2

0X03E8

0XFFFF

系统保留命令字,目前0XFFFE为心跳包,0XFFFF为心跳应答包

 

应答状态(status),请求时总设置为0;应答时,由SP应用服务程序返回相应的操作结果或错误原因;

任务流水号(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应用服务程序在发送之前,同样根据密匙对该返回字符串进行加密处理,然后对加密字节流长度进行计算,加上刚才发送过来的包头标识和版本号以及保留字等,组合成信息包;注意这时,字节流的长度是返回加密字节流的长度,而且是网络字节的。

 

来自:http://blog.sina.com.cn/s/blog_62fd44430100v727.html

分享到:
评论

相关推荐

    计算机网络课程设计发送TCP数据包.doc

    在本课程设计 中,发送TCP包时隐藏了自己的IP地址,因此我们要自己填充IP头,设置IP头操作选项。 其中flag设置为ture,并设定 IP_HDRINCL 选项,表明自己来构造IP头。注意,如果设置IP_HDRINCL 选项,那么必须具有 ...

    c#tcp 粘包拆包解决方法,包头加数据长度

    发生TCP粘包或拆包有很多原因,现列出常见...3、要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。 4、接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。

    abb机器人外部tcp定义方法-如何实现ABB机器人和视觉系统间的TCPIP通讯呢?.pdf

    abb机器⼈外部tcp定义⽅法_如何实现ABB机器⼈和视觉系统 间的TCPIP通讯呢? SocketCreate socket_vision; !创建套接字,⽤于连接远程计算机,这⾥注意,下⾯编程是把机器⼈作为客户端,远程计算机作为服务器的 ...

    C++使用SOCKET实现TCP-IP协议的通讯最好的DEMO源码

    在上面这张图中,你可以理解为程序A和程序B是2个SOCKET程序,服务器端程序A设置端口为81,已接受到3个客户端的连接,计算机C开了2个程序,分别连接到E和D,而他的端口是计算机自动分配的,连接到E的端口为789,连接...

    实验三Socket通信实验报告.doc

    1.1利用Socket来接收信息 TcpListener tlListen1 = new TcpListener ( 8889 ) ; //侦听端口号 tlListen1.Start ( ) ; Socket skSocket = tlListen1.AcceptSocket ( ) ; //接受远程计算机的连接请求,并获得用以接收...

    c_socket编程入门

    System.Net 命名空间中的所有其他网络访问类都建立在该套接字 Socket实现之上,如TCPClient、TCPListener 和 UDPClient 类封装有关创建到 Internet 的 TCP 和 UDP 连接的详细信息;NetworkStream类则提供用于网络...

    python TCP Socket的粘包和分包的处理详解

    在进行TCP Socket开发时,都需要处理数据包粘包和分包的情况。本文详细讲解解决该问题的步骤。使用的语言是Python。实际上解决该问题很简单,在应用层下,定义一个协议:消息头部+消息长度+消息正文即可。 那什么是...

    计算机网络课程设计--数据包发送和接受程序的实现.doc

    《计算机网络》课程设计 题 目 数据包发送和接受程序的实现 学 院 计算机学院 2012年12月21日 数据包发送和接受程序的实现 一、设计题目与要求 1.设计题目 发送TCP数据包 2.设计要求 本设计的功能是填充一个TCP...

    使用SOCKET实现TCP-IP协议的通讯最好的DEMO源码

    在上面这张图中,你可以理解为程序A和程序B是2个SOCKET程序,服务器端程序A设置端口为81,已接受到3个客户端的连接,计算机C开了2个程序,分别连接到E和D,而他的端口是计算机自动分配的,连接到E的端口为789,连接...

    c# socket 编程

    //定义一个IPV4,TCP模式的Socket ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); MsgBuffer = new Byte[65535]; MsgSend = new Byte[65535]; //允许子线程...

    TCP聊天室 VC版 含实验报告

    基于TCP/IP的通信基本上都是利用SOCKET套接字进行数据通讯,程序一般分为服务器端和用户端两部分。设计思路(VC6.0下): 第一部分 服务器端 一、创建服务器套接字(create)。 二、服务器套接字进行信息绑定...

    Socket编程指南及示例程序

    包括六个UDP和TCP发送接受的cpp文件,一个基于MFC的局域网聊天小工具工程,和此小工具的所有运行时库、资源和执行程序。

    VB.net 网络通信(一收一发,包通).rar

    Dim s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) '定义一个名为s的Socket的对象,使用TCP协议 Dim localEndPoint As New IPEndPoint(IPAddress.Parse("127.0.0.1"), 1024)...

    利用Socket实现双机通信(计算机网络课程设计).doc

    Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用 它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解So cket接口。 Socket接口设计者最先是将接口放在Unix...

    基于C++实现(控制台)Socket 接口实现自定义协议通信【100010754】

    掌握 C 语言形式的 Socket 编程接口用法,能够正确发送和接收网络数据包。 开发一个客户端,实现人机交互界面和与服务器的通信。 开发一个服务端,实现并发处理多个客户端的请求。 程序界面不做要求,使用命令行...

    Linux-Socket-服务器编程实例.pptx

    Linux Socket服务器端编程实例 例:建立一个Linux TCP服务器,等待客户端的连接请求,一旦接收到客户端请求,将客户端的IP地址和端口号打印出来,并且向客户端发送"Hello!Socket communication world!"字符串,然后...

    TCP-IP详解卷2:实现.part1

    《TCP-IP详解》共3卷,其他卷请到我空间下载,第2卷共分两个part,请下载完两个part后在解压。本书完整而详细地介绍了TCP/IP协议是如何实现的。书中给出了约500个图例,15 000行实际操作的C代码,采用举例教学的方法...

    TCP_IP详解卷1

    作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。 本书适合作为计算机专业学生学习网络的教材和教师参考书。也...

    TCPIP详解--共三卷

    TCP/IP详解 卷1:协议 译者序 前言 第1章 概述 1 1.1 引言 1 1.2 分层 1 1.3 TCP/IP的分层 4 1.4 互联网的地址 5 1.5 域名系统 6 1.6 封装 6 1.7 分用 8 1.8 客户-服务器模型 8 1.9 端口号 9 1.10 标准化过程 10 ...

Global site tag (gtag.js) - Google Analytics