一种仿真系统自动同步可靠通信方法与流程

文档序号:15164747发布日期:2018-08-14 17:20阅读:来源:国知局

技术特征:

1.一种仿真系统自动同步可靠通信方法,包括若干台通过以太网连接的计算机成为主机,每台主机上运行一个或多个进程,其特征在于, 包括一个类UdpLink;相互通信的两个进程通过在各自的进程空间内创建两个互相匹配的所述类UdpLink的对象进行通信;所述匹配由这两个对象的初始化参数来保证;所述两个对象在所述进程间建立起一个逻辑通信信道;相互通信的两个进程使用各自对象的Send操作发送数据、使用第一对象的Recv操作接收数据;所述类UdpLink的对象具有自动同步功能,即当所述相互通信的两个进程或其中之一重新启动后,两个进程之间仍可继续实现通信;一个进程可以通过所述类UdpLink的N个对象与一个或多个其它进程建立起N个逻辑通信信道,N>1为正整数。

2.根据权利要求1所述的一种仿真系统自动同步可靠通信方法,其特征在于,所述类UdpLink实现如下构造函数:

UdpLink(const char *localIp, unsigned short localPort,const char *remoteIp, unsigned short remotePort);

其中,localIp是本地ip地址,十进制点字符串标准格式;localPort是本地端口号,以主机序表示;remoteIp是远程ip地址,十进制点字符串标准格式;remotePort是本地端口号,以主机序表示;与localIp,localPort,remoteIp, remotePort等价的信息被存储;被存储的与localIp和localPort等价的信息表示为(localIp,localPort);被存储的与remoteIp和remotePort等价的信息表示为(remoteIp,remotePort)。

3.根据权利要求2所述的一种仿真系统自动同步可靠通信方法,其特征在于,所述匹配由这两个对象的初始化参数来保证的具体做法是:

1) 第一进程创建的所述类UdpLink的第一对象按如下形式调用所述构造函数完成初始化操作:UdpLink(第一进程所在的主机上配置的第一ip地址,第一端口号,第二进程所在的主机上配置的第二ip地址,第二端口号);

2) 第二进程创建的所述类UdpLink的第二对象按如下形式调用所述构造函数完成初始化操作:UdpLink(第二进程所在的主机上配置的第二ip地址,第二端口号,第一进程所在的主机上配置的第一ip地址,第一端口号)。

4.根据权利要求3所述的一种仿真系统自动同步可靠通信方法,其特征在于,所述类UdpLink的每个对象包括一个发送队列、一个接收队列。

5.根据权利要求4所述的一种仿真系统自动同步可靠通信方法,其特征在于,所述类UdpLink维持一个后台线程,该线程负责驱动一个进程内的所述类UdpLink的每个对象完成如下操作:

1)从(localIp, localPort)向(remoteIp, remotePort)发送位于所述发送队列队首数据包,并在队首数据包被成功接收后从所述发送队列中删除该队首数据包;

2)从(localIp, localPort)接收发给该对象的数据包,并把有效数据包加入接收队列队尾;所述有效数据包是指确保按序接收一次且只接收一次的数据包;

3) 实现所述自动同步功能。

6.根据权利要求5所述的一种仿真系统自动同步可靠通信方法,其特征在于,所述自动同步功能的实现方法如下:

1)所述类UdpLink在硬盘上维持一个自动同步文件,所述自动同步文件存储一个计数值,以下称硬盘同步计数,初值为1;

2)所述类UdpLink维持一个静态数据成员,称为本地自动同步计数,初值为0;

3)所述类UdpLink维持一个数据成员,称为远程自动同步计数,初值为0;

4)当且仅当进程在每次启动后创建所述类UdpLink的首个对象时,所述类UdpLink读取所述自动同步文件中存储的硬盘同步计数到所述本地自动同步计数;然后,所述自动同步文件中的硬盘同步计数加1;

5)所述类UdpLink的每个对象被创建后,发送同步数据包,直到接收到同步应答数据包;取出同步应答数据包中的所述本地自动同步计数,并存于所述远程自动同步计数;

6)所述类UdpLink的每个对象接收到同步数据包后,如果该同步数据包包含的所述本地自动同步计数比所述远程自动同步计数小,执行如下操作,否则忽略该同步数据包:

a)清空所述发送队列和所述接收队列;

b)置发送计数和接收计数为0;

c)置所述远程自动同步计数为同步数据包包含的所述本地自动同步计数;

d)发同步应答数据包,该同步应答数据包包含该对象的所述本地自动同步计数。

7.根据权利要求6所述的一种仿真系统自动同步可靠通信方法,其特征在于,所述类UdpLink的Send操作负责生成数据包并把数据包添加到所述发送队列队尾;所述类UdpLink的Recv操作负责获取所述接收队列的队首数据包,并删除该队首数据包。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1