法律状态公告日
法律状态信息
法律状态
2020-06-23
未缴年费专利权终止 IPC(主分类):H04L12/58 授权公告日:20160406 终止日期:20190701 申请日:20130701
专利权的终止
2016-04-06
授权
授权
2013-11-20
实质审查的生效 IPC(主分类):H04L12/58 申请日:20130701
实质审查的生效
2013-10-23
公开
公开
技术领域
本发明涉及一种即时通讯系统与方法,该即时通讯方法和系统实现了用户注册、用户登录、好友增删、查看好友资料、发送消息、群发消息、文件传送等功能。
背景技术
随着信息化的普及和发展,现在网络不仅在各企事业单位中的应用越来越广泛而且也已经逐渐融入了每个人的生活当中,逐渐的成为人们生活中不可或缺的一部分。很多学校用户考虑使用即时通讯来提高内部交流的质量,理顺内部交流渠道,降低内部交流成本。尤其大学更是有迫切的需要。如果学校用户都使用目前免费的几种即时通讯软件,则无法充分发挥处于同一局域网的优势。加之,由于网络的虚拟性,目前即时通讯软件中均允许用户自己任意命名,这更给用户的管理带来了不便,而且不利于学校用户的交流。分析了以上的原因,可知自主开发应用于学校用户的即时通讯系统软件在现实生活中有很大的意义。
即时通信大部分的模式依然采用C/S(Client/Server,客户端/服务器)结构,但它不同于传统的客户端/服务器结构。用户首先从即时消息IM服务器上获取好友列表,以建立点对点的联系,然后用户(Client)和其好友(Client2)之间采用点对点方式发送信息:在无法直接点对点联系时,则用服务器中转的方式完成。客户机/服务器模型,又称为Client/Server模型,简称C/S架构。C/S计算技术在信息产业中占有重要的地位。这种客户/服务器模型是一种非对称式编程模式。该模式的基本思想是把集中在一起的应用划分成为功能不同的两个部分,分别在不同的计算机上运行,通过它们之间的分工合作来实现一个完整的功能。对于这种模式而言其中一部分需要作为服务器,用来响应并为客户提供固定的服务;另一部分则作为客户机程序用来向服务器提出请求或要求某 种服务。
服务器在C/S模型中处于一个中心地位。服务器一般同时为多个客户服务,这就造成了服务器设计的复杂性。特别是像即时通讯服务器这类具有社区性的服务器,它只有为群体提供服务才有意义。即时通讯服务器是数据中心,它是客户活动的中介,需要满足对众多客户的请求。
即时通信系统采用Client/Server体系结构,即客户机服务器客户端体系结构。C/S结构广泛应用于构造数据库系统,它包括连接在一个网络中的多台计算机。处理应用程序并请求另一台计算机服务的计算机称为客户端,处理数据库的计算机称为服务器。其特点是客户端只装载应用软件,而把数据库放在服务器上,这样就可以使客户端不需要存储数据,从而简化客户端软件。即时通信系统的服务器端与客户端通过SOCKET进行通讯。服务器端进行监听,当有通讯行为时,由客户端发起连接,服务器端响应。
上述C/S系统架构中,添加好友、删除好友、用户注册直接由服务器更新数据库,用户登录、查看好友资料,则是由服务器查询数据库后向客户端返回信息,发送消息则一律由客户端先发给服务器端,然后再由服务器端转发,文件传送亦是通过同样的方式先经由服务器再发至目的地址,群发消息则是先将要群发的消息发向服务器再由服务器发至所有客户端。
此方案中服务器一般同时为多个客户服务,这就造成了服务器设计的复杂性。服务器既需要对数据进行维护,又需要为所有的客户端发送消息,客户端较多的情况下,服务器的负载将会很大。
此外,还有一种P2P系统架构,客户端在添加好友时首先向服务器查询对应好友的IP地址,并直接向该客户端发送好友请求,数据库更新则由服务器来完成。删除好友、用户注册由服务器更新数据库即可完成。用户登录、查看好友资料,则由服务器查询数据库后向客户端返回信息,发送消息则是由服务器返回目的客户端的IP地址后,直接由客户端发至另一个客户端。发送文件与发送消息过程相一致。
此方案中服务器主要用于维护数据信息,而客户端则承担了所有发送消息、发送文件的工作。服务器的负载大大降低,但是若有一方不在线的情况下,此方案不适用。
发明内容
为了克服上述两种系统架构的缺点,本发明将上述两种系统架构融合,对于更新或查询数据库的操作,直接由服务器完成,对于发送消息、发送文件的操作首先尝试P2P发送,如果发送失败则由服务器来转发消息或文件。
综上所述,本发明提供了一种基于VC++的局域网即时通讯系统,采用C/S架构和P2P架构相融合的方案,一方面P2P技术可以大大减轻服务器的负载,另一方面,服务器转发机制增加了消息发送的可靠性。
一种基于VC++的局域网即时通讯方法,包括:用户注册步骤、用户登录步骤、添加好友步骤、好友删除步骤、用户消息发送步骤、群组消息发送步骤、文件传送步骤、用户退出步骤等。
该用户注册步骤包括:用户填写注册信息,客户端检查信息格式,按照事先约定的消息格式封装数据,客户端向服务器端发送新注册申请,传输注册数据,服务器端生成新ID,服务器端在数据库中添加新用户,服务器端向客户端返回用户ID;
该用户登录步骤包括:用户输入登录用户名、密码,客户端按照事先约定的格式封装消息,客户端发送消息,服务器端验证登录信息,服务器端返回登录合法与否信息,如合法则查询数据库返回该用户信息,服务器端传输好友列表,服务器端传输离线信息,服务器端刷新其他在线用户列表;
该添加好友步骤包括:客户端按照事先约定的格式封装消息,客户端发送消息,服务器端解析消息,服务器端更新好友关系表并返回状态,如添加成功,客户端好友列表增加该好友;
该好友删除步骤包括:客户端按照事先约定的格式封装消息,客户端发送消息,服务器端解析消息,服务器端更新好友关系表并返回状态,如删除成功,客户端好友列表删除该好友;
该用户消息发送步骤包括:用户A向用户B发送消息,客户端按照事先约定的格式封装消息,若是第一次向用户B发送消息,则客户端将消息发送至服务器端,服务器端解析消息,若用户B在线,则服务器端向其转发消息,并向 用户A返回用户B的IP地址,若用户B不在线,则服务器端将该消息存入离线消息表,并向用户A返回用户B离线的信息;若用户A不是第一次向用户B发送消息,则客户端直接将消息发送至用户B,不需要服务器端转发;
该群组消息发送步骤包括:接收用户群组消息转发请求后,从数据库中读取该群组的成员名单,群组的所有成员逐个发送该群组消息,首先尝试直接轮循给每个成员点对点(P2P)的发送消息,当某个消息发送失败时再通过服务器转发。
该文件传送步骤包括:当用户A和用户B发送过消息时,用户A已经知道用户B的IP地址,用户A直接把文件信息发送给B,如果直接发送失败,则由客户端向服务器端提出文件传送中转请求,以完成文件的传送;
该用户退出步骤包括:用户退出后,客户端发送退出消息,服务器端更新数据库并刷新在线用户列表,服务器端通知好友下线,客户端改变好友状态。
一种基于VC++的局域网即时通讯系统,包括:用户注册模块、用户登录模块、添加好友模块、好友删除模块、用户消息发送模块、群组消息发送模块、文件传送模块、用户退出模块等。
用户注册模块,在该模块中,用户填写注册信息,客户端检查信息格式,按照事先约定的消息格式封装数据,客户端向服务器端发送新注册申请,传输注册数据,服务器端生成新ID,服务器端在数据库中添加新用户,服务器端向客户端返回用户ID;
用户登录模块,在该模块中,用户输入登录用户名、密码,客户端按照事先约定的格式封装消息,客户端发送消息,服务器端验证登录信息,服务器端返回登录合法与否信息,如合法则查询数据库返回该用户信息,服务器端传输好友列表,服务器端传输离线信息,服务器端刷新其他在线用户列表;
添加好友模块,在该模块中,客户端按照事先约定的格式封装消息,客户端发送消息,服务器端解析消息,服务器端更新好友关系表并返回状态,如添加成功,客户端好友列表增加该好友;
好友删除模块,在该模块中,客户端按照事先约定的格式封装消息,客户端发送消息,服务器端解析消息,服务器端更新好友关系表并返回状态,如删除成功,客户端好友列表删除该好友;
用户消息发送模块,在该模块中,用户A向用户B发送消息,客户端按照事先约定的格式封装消息,若是第一次向用户B发送消息,则客户端将消息发送至服务器端,服务器端解析消息,若用户B在线,则服务器端向其转发消息,并向用户A返回用户B的IP地址,若用户B不在线,则服务器端将该消息存入离线消息表,并向用户A返回用户B离线的信息;若用户A不是第一次向用户B发送消息,则客户端直接将消息发送至用户B,不需要服务器端转发;
群组消息发送模块,在该模块中,接收用户群组消息转发请求后,从数据库中读取该群组的成员名单,群组的所有成员逐个发送该群组消息,首先尝试直接轮循给每个成员点对点(P2P)的发送消息,当某个消息发送失败时再通过服务器转发。
文件传送模块,在该模块中,当用户A和用户B发送过消息时,用户A已经知道用户B的IP地址,用户A直接把文件信息发送给B,如果直接发送失败,则由客户端向服务器端提出文件传送中转请求,以完成文件的传送;
用户退出模块,在该模块中,用户退出后,客户端发送退出消息,服务器端更新数据库并刷新在线用户列表,服务器端通知好友下线,客户端改变好友状态。
附图说明:
图1为即时通讯系统示例
图2为系统线程结构
图3用户登录模块流程图
图4发送群消息流程图
图5发送文件流程图
具体实施方式
即时通讯系统的客户端可以实现注册、身份验证后可登陆、好友状态显示、 好友增删、发送消息、群发消息,文件传送等功能;同时客户端可实现P2P聊天、发送文件。
客户端可以是在Windows平台下采用VC++MFC开发的网络应用程序。所有静态数据(需要在服务停止时保存的数据)用数据库保存和组织。
客户端的功能模块包括用户注册模块、用户登录模块、添加/删除好友模块、用户消息发送模块、群组消息发送模块,文件发送模块、用户退出模块。在这些模块同客户端或服务器进行通信时,均按照事先约定的协议解析方法对消息进行解析,再通过底层网通信模块进行消息的传递。
1.各模块的实现过程概述如下:
用户注册流程:用户填写注册信息,客户端检查信息格式,按照事先约定的消息格式封装数据,客户端向服务器端发送新注册申请,传输注册数据,服务器端生成新ID,服务器端在数据库中添加新用户,服务器端向客户端返回用户ID。
用户登录流程:用户输入登录用户名、密码,客户端按照事先约定的格式封装消息,客户端发送消息,服务器端验证登录信息,服务器端返回登录合法与否信息、如合法则查询数据库返回该用户信息,服务器端传输好友列表,服务器端传输离线信息,服务器端刷新其他在线用户列表。
添加好友流程:客户端按照事先约定的格式封装消息,客户端发送消息,服务器端解析消息,服务器端更新好友关系表并返回状态,如添加成功,客户端好友列表增加该好友。
好友删除流程:客户端按照事先约定的格式封装消息,客户端发送消息,服务器端解析消息,服务器端更新好友关系表并返回状态,如删除成功,客户端好友列表删除该好友。
发送消息流程:用户A向用户B发送消息,客户端按照事先约定的格式封装消息,若是第一次向用户B发送消息,则客户端将消息发送至服务器端,服务器端解析消息,若用户B在线,则服务器端向其转发消息,并向用户A返回用户B的IP地址,若用户B不在线,则服务器端将该消息存入离线消息表,并向用户A返回用户B离线的信息;若用户A不是第一次向用户B发送消息,则客户端直接将消息发送至用户B,不需要服务器端转发。
群组消息发送流程:接收用户群组消息转发请求后,从数据库中读取该群组的成员名单,群组的所有成员逐个依照用户消息转发处理模块发送该消息。在客户端维护有一个群组的对象的地址表,其首先尝试直接轮循给每个成员P2P发送消息,当某个消息发送失败时才通过服务器转发。
文件传送流程:用户A向用户B发送文件,前提条件为A和B发送过消息,此时A已经知道B的IP地址,只要文件还未发送完,A直接把文件信息发送给B。
用户退出流程:用户退出,客户端发送退出消息,服务器端更新数据库并刷新在线用户列表,服务器端通知好友下线,客户端改变好友状态。
2.即时通讯系统是通过如下方式实现的:
服务器包括一个主线程,N个服务线程,主进程创建其它线程,开放TCP连接端口,并等待客户连接。若有客户端连接,则可以为多个远程用户连接服务,当连接数超过当前服务限制的时候会动态增加服务线程进行扩充。服务器端同时负责创建、维护和管理本地数据结构和数据文件,并同步更新数据库。
客户端包括一个主线程,一个接收线程,主线程负责连接服务器,并启动接收线程,接收线程根据消息的类型进行不同的处理。
各模块设计如下:
(1)用户注册模块
用户填写注册信息,客户端检查信息格式,按照事先约定的消息格式封装数据,客户端向服务器端发送新注册申请,传输注册数据,服务器端生成新ID,服务器端在数据库中添加新用户,服务器端向客户端返回用户ID。
(2)用户登录模块
如图3所示,用户登录请求处理模块的处理过程是:客户端发送用户请求,服务器端接收用户登录请求,首先判断其登录密码是否正确。如密钥不正确则关闭该连接。如果密码正确,则修改该用户在数据库中对应的记录,将其IP、端口信息、在线状态更新,并向用户返回离线消息和离线好友请求,从数据库中读取所有非离线好友名单,将非离线好友名单回送给用户。
(3)用户消息发送模块
客户端A向客户端B发送消息,若是第一次发送则由服务器转发,若B下 线,则将信息存入数据库。否则A直接向B发送消息。
只要客户端发现目的用户不能收到消息,都会自动申请服务器中转。其处理流程如下:接收用户消息转发请求,从数据库中读取发送目标用户的状态,如果该用户状态为离线,则将该转发消息写入待发送消息数据表。如果该用户状态为非离线状态,首先判断其登录的主服务器是不是当前服务器,如果不是则向根服务器转发,(如当前服务器就是根服务器则进入相应处理模块)。
(4)群组消息发送模块
群组消息是企业级即时通讯的一个重要特性。在学校中,如通知的下达,或者网络文字会议等,必须要求能够进行群组交流。因此在系统我们特别设计了群组转发处理模块。其处理过程如图4所示:接收用户群组消息转发请求后,从数据库中读取该群组的成员名单,群组的所有成员逐个依照用户消息转发处理模块发送该消息。在客户端维护有一个群组的对象的地址表,其首先尝试直接轮循给每个成员P2P发送消息,当某个消息发送失败时才通过服务器转发。
(5)文件发送模块
在学校级用户中,P2P的文件传送是首先尝试的方案。如果两个客户端能够直接传送文件,则直接传送。如果直接传送失败,则由客户端向主服务器提出文件传送中转请求,交由用户文件传送中转请求处理模块完成该服务。
失败的原因主要是:
1)目的方位于有防火墙的子网中,导致不能直接连接;
2)源用户位于有防火墙的子网中,导致不能直接连接。
3)源用户和目的用户都位于有防火墙的子网中,导致不能直接连接。
其具体流程如图5所示:
接收用户文件传送中转请求(文件传送的源和目的间已经完成了文件传送请求和回应的过程,无法建立直接连接,由发起文件传送的源端向主服务器申请文件传送路由中转)。主服务器分配某通讯路由服务器为其服务。
(6)添加/删除好友模块
添加好友模块:客户端按照事先约定的格式封装消息,客户端发送消息,服务器端解析消息,服务器端更新好友关系表并返回状态,如添加成功,客户端好友列表增加该好友。
好友删除模块:客户端按照事先约定的格式封装消息,客户端发送消息,服务器端解析消息,服务器端更新好友关系表并返回状态,如删除成功,客户端好友列表删除该好友。
(7)用户退出模块
用户退出:用户退出,客户端发送退出消息,服务器端更新数据库并刷新在线用户列表,服务器端通知好友下线,客户端改变好友状态。
在本系统中,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。从以下几个方面做:(1)在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;(2)一个模块的功能是否会对另一个模块的功能产生不利的影响:(3)各个子功能组合起来,能否达到预期要求的父功能;(4)全局数据结构是否有问题;(5)单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。为了保证软件生命周期,在单元测试的同时就开始了组装测试,发现并排除在模块连接中可能出现的问题。选择什么方式把模块组装起来形成一个可运行的系统,直接影响到模块测试用例的形式,所用测试工具的类型,模块编号的次序和测试的次序,以及生成测试用例的费用和调试的费用。通常,把模块组装成为系统的方式有两种方式:一次性组装方式和增殖式组装方式。
通过对多个功能模块进行模块测试,然后将这些模块逐步组装成较大的系统,在组装过程中一边连接一边测试,最后通过增殖逐步组装成一个完整的系统。
机译: 基于语音识别的即时通讯方法及即时通讯系统
机译: 无线局域网系统中基于时隙的信道访问控制装置及方法,无线局域网中基于时隙的信道接入终端
机译: 无线局域网系统中基于时隙的信道访问控制以及无线局域网中基于时隙的信道访问终端的控制装置和方法