彭新清,赵聪聪,易子钧,魏茂盛
(火箭军工程大学,西安 710025)
当前,通信方式错综复杂,话音、图像和视频传输所需要的基础设施多,通信质量容易受各种因素的影响,并且费用较大。而随着技术的发展,市场通信软件也更多,然而这些软件并不能保证通信信息的安全,容易出现用户账号密码被窃取、信息被恶意篡改、通信内容遭人窃听等现象。如何开发一套既能实现通信质量高、传输速率快,又能确保信息安全并且费用低廉的系统成为重点发展的方向。
系统工作流程图如下图所示。系统的硬件环境由计算机、网线、交换机等组成局域网,通过Ping命令测试网络状态。采用的关键技术:Sockets套接字、MFC类库(主要包括:应用程序类、Windows套接字类、数据库类、对话框类、控件类等)、数据库应用技术等。
首先利用MFC AppWizard建立应用程序对话框,使用MFC类库作为静态的DLL,提供面向对象的资源。然后添加相应的控件。编辑框控件:用户名IDC_EDIT_USERNAME、密码IDC_EDIT_PASSWORD、服务器地址IDC_EDIT_ADDRESS、总人数IDC_EDIT_TOTAL、在线人数IDC_EDIT_ONLINE、消息内容IDC_EDIT_MESSAGE;按钮控件:确定IDOK、取消IDCANCEL、群发IDC_BUTTON_MESSAGE;静态文本控件:用户名IDC_STATIC、总人数IDC_STATIC1、在线人数IDC_STATIC2、在线人员IDC_STATIC3、消息内容IDC_STATIC4;列表控件:在线人员IDC_LIST_ONLINE。再分模块进行编写程序,(1)响应客户端注册、登录的功能。用户所有信息由数据库进行管理,注册账号时,会自动将生成的账号密码添加到数据库内,当管理员进行登录时,利用数据库提供的接口访问数据库,对数据库内存储的账号密码轮询,若所用的账号密码和数据库内保存的密码相同,则允许用户登录,这一机制能够验证用户身份是否正确,可以防止他人冒充管理员。Mysql数据库提供了访问数据库的API函数,通过编写程序的方式将C++和数据库连接在一起才能对数据库的内容进行操作。在注册时,系统通过:m_userName.GetWindowTextA(username);m_password.GetWindowTextA(password);m_address.GetWindowTextA(address)三个语句分别获取用户输入的账号、密码及数据库地址,再通过IsEmpty()函数判断用户名或密码是否为空,如果为空则给出提示并返回注册界面。用户端在使用时根据所注册的账号进行登陆,登陆也需要服务器端进行验证,确保访问者身份的合法性。(2)实时显示客户端总人数和当前在线客户端人数。当有新用户注册成功时,会即时反馈消息给服务器端,服务器端接受客户的注册,总人数自动加1,当某一用户使用已注册过的账号密码进行登录,并且成功登录到服务器端上时,当前在线人数一栏的数字会自动加1。(3)实时显示在线用户的昵称、IP地址。当某一用户通过认证登录到服务器端时,不仅当前在线人数一栏的数字会自动加1,而且会在下方列出登录用户的昵称和IP地址,这个可以识别用户是否在线,便于管理。(4)在线群发消息。可快速实现消息的群发,主要目的是用于通知类的消息发送。(5)“会议室”功能。受各类因素影响,带宽不足以支持音频和视频通话时,采用这样的形式进行交流,服务器掌握所有通信内容,适用用户群体之间 “开会”。利用OnReceive函数用于接收网络中传送的消息,根据客户端的不同请求进行不同处理,用户发送的消息先发送给服务器,服务器再通过SendUserCommandToIP语句统一向所有“会议室”内的用户转发。(6)其他功能。作为管理层,服务器端要求能对用户信息进行修改、删除和添加,一种方法是在数据库直接编辑,另一种方法是编写SQL语言的方式进行操作,使用起来简单方便且功能相对全面。从这一点上来说,服务器端可以间接地为用户进行账号的分配,方便联络通讯时互相识别,这也在一定程度上确保了信息传输的安全性。
先进行模块测试:验证用户身份的合法性、实时显示当前客户端总数、显示目前在线的客户端总数、显示在线客户端用户名和IP地址,群发系统消息等,然后综合测试系统,确保稳定性和可靠性。通过联调基本达到预计的效果。
[1] 李琳娜.Visual C++编程实战宝典[M].北京:清华大学出版社,2014.8.