一、 通信模型
1.1 信息传输
软件由两个主要部分组成:客户端和服务器端。两个客户端之间不是直接连接的,而是通过服务器沟通,一个客户端可以同时和多个其它客户端通信,框图如下:
图1 聊天软件模型
服务器对客户端接收的信息处理并派发给接收信息的客户端,服务器为每个客户端分配唯一ID,作为用户的唯一标志。客户端与服务器之间实现双向通信,加密和解密都是在客户端实现的,可以根据用户的选择自动设置加密解密。
1.2 文件传输
文件传输分为大型文件传输和小型文件传输(在程序中以2M分界),对小型文件的传输,是通过服务器转发的。对大型文件而言,为了节省传输时间,文件传输请求和接收请求通过服务器转发,之后将失去中转权,所有大型文件(理论上可传输超过1000G的文件)都将实行点到点的通信模式。
图2 文件传输模型
如图2所示,无论是大型文件,还是小型文件,都必须首先经过1—2—3—4路径。文件发送请求信息包括文件名、文件大小、接收该文件的ID,发送文件的ID信息,服务器对文件请求指令中的文件大小作判断,如果文件属于小型文件(小于2M),则文件开始传输,路径为6—7(图中的绿色路径)。反之,如果是大型文件,则文件传输的路径为5(图中的红色路径)。无论是大型文件还是小型文件,传输和接收都在心开辟的线程中执行,不会影响消息通信。
软件可应用于所需安全性较高的通信场合,如高科技技术交流,国家机密文件传输等等
二、客户端
2.1 主界面
客户端由多个Dialog控件组成,登录主界面中使用了ListControl控件,控件中每个Item保存了一个用户的信息,包括用户名和ID。在ListControl控件中处理双击事件,当用户双击某个Item的时候,生成新的Dialog,用于与用户传递信息。Menu栏报还了常用操作,包括“发送信息”、“添加好友”、“更改信息”、“注册用户”、“退出”。其中的“添加好友”、“更改信息”、“注册用户”三项是与服务器互动的形式完成的,即响应这些菜单后,会向服务器发送相信的信息,服务器处理信息并返回结果给客户端。。
2.2登录界面
初次登录
用户输入信息后,保存用户信息到LOGINFO结构体,此结构体保存了用户的登录信息,包包括ID,NAME,服务器IP,端口等。点击登录界面的“ok”通过指定端口向指定ip发送LogIn信息,表示请求登录,如果服务器收到客户端的LogIn请求,开始验证用户信息,包括检测用户密码和用户ID,如果两者匹配,向客户端返回LogIn信息,提示用户登录成功(图3)。如果用户登录成功,设置用户登录状态为TRUE。如果客户端发出LogIn消息之后没有收到消息或者收到服务器的登录错误消息,客户端将不能登录。
图3 登录界面
重新登录
当前在线用户再次点击登录按键之后,会再次弹出登录窗口,用户输入信息并发出请求之后,会收到服务器的返回LogIn信息。客户端会提示用户是否更改用户登录(图4),选择“是”则新用户登录,并更新LOGINFO结构体对象,选择“否”返回,设置用户窗体相关信息并设置登录状态为FALSE。
图4 提示更换用户界面
2