一种网络版轮机模拟器系统通讯平台设计

2019-09-23 06:35蒋传杭陈至哲
智富时代 2019年8期
关键词:轮机服务器端模拟器

蒋传杭 陈至哲

采用C#编程语言为开发语言和面向对象设计方法,利用UML建模语言,结合线程池、UDP通讯协议等技术基础,开发出一种适用于网络版轮机模拟器的通讯平台。主要完成即时通讯模块、数据存储模块和操作显示模块等,通过各模块之间协作来实现通讯平台的功能需求。整体架构采用C/S结构,分别对服务器端、客户端和数据库等进行分模块设计,客户端之间采用了点对点通讯架构,利用UDP通讯协议,实现了用户模型启动、通讯和操作提示等功能,完成整个网络版轮机模拟器通讯平台的开发。

该系统主要包括四个部分:客户端、主服务器、组服务器和数据库。当一个操作组满足所需操作人数时,同组成员可进行分角色轮机系统模拟操作,同组客户端之间通过组服务器进行通讯,不再通过主服务器,其数据库负责数据的存储、访问和保证数据的完整性约束等,各模块之间均采用工业以太网UDP通讯协,来完成数据的交互。

1、整体架构设计

该平台添加了组服务器与具体的轮机系统的模型,主服务器主要负责团队总数的管理和为客户端分组等功能,当人数满足条件时组服务器运行,客户端可以直接对轮机系统进行模拟操作,组服务器用来实现模型解算、访问数据库等功能。而客户端之间的数据交互和通讯采用都点对点结构。

服务器端先行启动,启动的同时开启端口监听客户端是否接入。客户端再行进行用户信息登录等相关操作,服务器段进行验证,认证成功后允许用户进入通讯平台,之后服务器端进行角色分配和初始化操作,进行模拟仿真训练,客户端之间可实现实时的信息和数据交互。

2、客户端设计

客户端运用.Net平台,采用C#编程语言,通过Visual Studio2010中Windows窗体应用程序设计操作界面,主要采用Button、Label和Text Box等基础控件。

在该通讯平台中引入心跳机制,首先主服务器端负责监控客户端是否登录成功,进入局域网,当客户端成功登录进来,主服务器创建一个Client,客户端连接成功后发送登录信息,服务器端监听客户端是否有消息传出,有消息时,判断该消息类型,如果是新客户端的登录信息,即设置用户ID,显示该用户在线。服务器端对登录成功的用户每10s进行一次空闲计数,当客户端向主服务器端发送的消息类型为心跳时,证明该客户端处于在线状态,空闲计数清零,可参与该轮机模拟器通讯平台模拟操作。

服务器端对客户端每10s进行一次空间计数,逐次加一,当空间计数为3000时(代表该客户端已30秒没有心跳),服务器自动断开该Client,判定该用户处于离线状态,不可参与该轮机模拟器通讯平台模拟操作,需重新登录。

3、服务器端流程

主服务器端引进一个监听机制,首先平台开启后进行初始化,通过创建一个UDP监听线程,负责监控是否有客户端接入进该通讯平台,一旦客户端可以构成一组(四个客户端为一组),形成一个操作组。

通过创建一个控制台程序作为主服务器,实现与多个客户端程序通讯,主线程的socket绑定在一个固定端口,用于监听客户端的信息,每当一个客户端启动后,会发送一个连接请求,Server端就会自动创建一個新的线程,用来实现服务器端于客户端之间的通讯,当客户端退出程序时,结束该线程。

监听机制的引用是利用多线程技术。

4、数据库设计

此通讯平台的数据库使用SQL Server实现。

5、UDP通讯协议设计

该轮机模拟器模型各个模块之间均采用UDP通讯协议来进行数据和信息的交互,需对UDP协议进行具体详细的制定。

客户端与服务器端的信息主要分为两类:

A.客户端指令与服务器端应答

B.仿真模拟数据分发(具体包括:1.客户端与服务器之间采用单播 2.服务器和客户端之间采用组播3.客户端之间采用点对点通讯)

6、以太网桢基本格式

客户端指令和服务器应答信息数据包基本格式:

数据起始符(2 字节) + 数据长度(4字节) +客户端号(4 字节) +信息传输文本 (0-500 字节) + 结束符(2 字节)

仿真操作数据包基本格式:

数据起始符(2 字节) + 数据长度(4 字节) +客户端号(4 字节) +数据传输文本 (0-500 字节) + 结束符(2 字节)

仿真数据数据包基本格式:

数据起始符(2 字节) + 数据长度(4 字节) +时间戳(4字节)+数据传输文本 (0-500 字节) + 结束符(2 字节)

6.1数据起始符(21H)

本通讯平台数据起始符定义为16 进制单字节数(21),即每组数据包均以21(H)为起始字符,便于数据包的报头校验。各个模块之间均采用不同的UDP数据包格式来完成信息与数据的交互。

ASCII码:!。

6.2数据长度

所有数据,包括起始字符和结束字符,字节长度为2字节。

6.3客户端号

登录系统客户端的编号。定义为整型,字节长度为4字节。

6.4时间戳

由于UDP通讯协议不提供拥塞控制,因此在该通讯平台中引入了时间戳[48]。时间戳是在应用层对数据报进行排序,在数据包进行封包时封存当前时间,对数据包进行一个时间上的标记,以此作为数据发送顺序先后的凭证。而接收端通过两个数据包中封存的时间戳标记,计算出这两组数据发送间隔(或者称为两组数据包的时间间隔),以此对数据包的传输效率进行控制[49],通过将时间戳插入数据包中完成这一功能。

在该系统协议中,用int32型数据表示时间戳。时间戳从0开始,每次传输发生时,时间戳加1。客户端验证时间戳,如小于原时间戳,则该数据包应丢弃。

6.5结束符

数据结束符定义为16进制单字节数(0DH),即每组数据包均以0D(H)为结束字符,便于数据包的尾校验。

十进制:13。

ASCII码:回车。

当仿真数据量大,不再对仿真数据进行编码,而是通过在所传输文本中的位置确定数据的值、类型和含义。所有的值都表示为float型数据,数据包不超过1472个字节,如果超过1472字节的话,则需要对仿真数据进行分包发送。

猜你喜欢
轮机服务器端模拟器
了不起的安检模拟器
划船模拟器
Linux环境下基于Socket的数据传输软件设计
浅析异步通信层的架构在ASP.NET 程序中的应用
基于Qt的安全即时通讯软件服务器端设计
轮机英语趣味性教学方法研究
高职轮机专业高中职衔接专业英语课程体系的构建
动态飞行模拟器及其发展概述
面向实操评估的轮机虚拟拆装考试系统开发
在职船员“轮机自动化”适任考试有效培训探讨