基于eclipse平台的即时通信设计与开发毕业设计Word文件下载.docx
《基于eclipse平台的即时通信设计与开发毕业设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于eclipse平台的即时通信设计与开发毕业设计Word文件下载.docx(32页珍藏版)》请在冰点文库上搜索。
![基于eclipse平台的即时通信设计与开发毕业设计Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/10/147569f5-9129-4ce9-ba91-f4972c169b7d/147569f5-9129-4ce9-ba91-f4972c169b7d1.gif)
学会java程序开发,,学习多线程开发技术,搭建eclipse开发平台来做我们的编程,在mysql上搭建所需要的数据库。
探索在eclipse平台下,如何使用Socket编程、TCP/IP协议等实现该软件的开发和设计。
1.4本论文的主要内容
目前来看衡量一个实时通信聊天软件的条件大概有:
稳定性、扩展性。
安全性和。
所以,我要做的这个实时聊天软件是在eclipse平台上用java语言来开发,研究在该平台下的socket通信技术是我们的关键。
使用配置文件作为数据管理。
为了完成在多个客户端之间互相通信,我们在客户端上做了用户注册账号、登录界面。
具有发送实时及离线消息功能以及对好友进行添加、查找和删除的功能。
本文第1章主要介绍了即时通信的发展的背景及意义、课题研究现状和目前比较流行的成功的产品还有课题内容。
对我要做的软件的功能与要求进行了简单的描述。
本文第2章向大家叙述了实时聊天系统的开发平台和语言以及主要的技术。
本文第3章是软件的分析与设计。
完成了这个聊天软件的需求分析以及对技术的理解,对组成这个软件的各个部分进行仔细的划分和分析。
如何设计了这个聊天软件的系统和数据结构。
本文第4章是系统使怎么样实现,对各个功能区的详细执行过程进行了分析,各个功能区的结构图接行了介绍。
本文第5章介绍系统测试。
本文结尾对这次设计的参考文献和对老师的致谢,并且总结了一下本次设计。
2即时通信系统开发环境和关键技术
2.1即时通信开发环境
我所设计的是一个面向中小型机构内部通信需求的网络即时信息软件,要在短时间内开发出来并且要满足客户要求,无论是硬件还是软件都要选择合适,要求如下:
开发设备应该完备;
开发机器的性能必须稳定;
操作系统的选择应该适当;
开发出的程序可以在尽可能多的平台上运行;
要求运行机配置尽可能低档。
对此,我们选择的硬件环境和软件环境如下:
1、硬件环境
·
处理器:
IntelPentiumPIII或更高处理器
内存:
256MB或更高
开发该系统应尽可能采用高档的硬件。
因此,在应用时应采用更好的配置。
2、软件环境
操作系统:
Windows2000/WindowsXP/Windows2003
开发平台:
eclipse/myeclipse
开发语言:
java
2.2关键技术
2.2.1java语言
Java编程语言的风格十分接近C、C++语言。
Java是一个纯的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心,Java舍弃了C++语言中容易引起错误的指针(以引用取代)、运算符重载(operatoroverloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。
在JavaSE1.5版本中,Java又引入了泛型编程(GenericProgramming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
2.2.2WINDOWSSOCKETS网络编程接口
选定WINDOWS平台开发网络通信程序,可以选择WINDOWS的SOCKETS编程接口,WindowsSockets是一套开放的、支持多种协议的Windows下的网络编程接口。
现在的Winsock已经基本上实现了与协议无关,你可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。
Windowssockets无疑是我们进行网络编程的利器。
所有的WindowsSockets实现都支持流套接口和数据报套接口。
应用程序调用WindowsSockets的API实现相互之间的通讯。
WindowsSockets又利用下层的网络
通讯协议功能和操作系统调用实现实际的通讯工作。
它们之间的关系如图2.1所示:
图2.1WindowsSockets实现通讯工作的各层关系图
2.2.3WSAAsyncSelect模型开发
WSAAsyncSelect()调用允许应用程序程序注册一个或多个感兴趣的网络事件。
这一API调用用来取代探寻网络I/O调用。
在select()或非阻塞I/O例程(例如send()和recv())已经被调用或将要被调用的情况下都可以使用WSAAsyncSelect()调用。
在这种情况下,在声明感兴趣的网络事件时,你必须提供一个通知时使用的窗口句柄。
那么在你声明的感兴趣的网络事件发生时,对应的窗口将收到一个基于消息的通知。
其过程如图2.2所示。
图2.2WSAAsyncSelect模型
2.2.4TCP/IP协议、TCP协议
网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。
IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;
相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。
IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。
IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。
如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。
TCP将包排序并进行错误检查,同时实现虚电路间的连接。
TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
UDP与TCP位于同一层,但对于数据包的顺序错误或重发。
因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务。
TCP和UDP服务通常有一个客户/服务器的关系。
两个系统间的多重连接是这样相互确认并协调一致的,TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:
源IP地址发送包的IP地址。
目的IP地址接收包的IP地址。
源端口源系统上的连接的端口。
目的端口目的系统上的连接的端口。
端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。
一个端口对应一个16比特的数。
服务进程通常使用一个固定的端口,例如,SMTP使用25。
这些端口号是“广为人知”的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯,图如2.3所示。
图2.3面向连接的(TCP)连接过程
2.2.5Client/Server结构(客户机/服务器模式)
Client/Server结构(C/S结构)是大家熟知的客户机和服务器结构。
通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。
目前大多数应用软件系统都是Client/Server形式的两层结构。
C/S结构软件分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量。
由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的网络内使用。
C/S结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。
对应的优点就是客户端响应速度快。
缺点主要有以下几个:
只适用于网络。
而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。
这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。
3即时通信系统分析与设计
3.1即时通信系统分析
3.1.1系统需求
网络聊天交流是目前互联网提供的主要内容。
聊天系统有多种实现方式,类似ICQ属于一种点对点的聊天系统;
还有一种是基于Socket的集中式聊天系统,这种聊天系统需要登陆统一的聊天服务器。
在基于Socket的聊天系统中,主要有两种角色:
服务器和客户端,不同的客户端登陆集中式的服务器,通过服务器将一个客户端发出的信息推送到其他所有客户端。
基于Socket的聊天系统最早实现是使用网页刷新方式,通过客户端不断地自动刷新,服务器端整个页面内容下载到客户端显示,这种方式的聊天速度慢,而且有刷屏现象,很快被更新的聊天技术所替代。
聊天系统在客户端和服务器之间主要传送的是文字信息,服务器端只需要把最近的文字信息推送到客户端,这样减少了网络传输内容,节省了网络传输的时间,无疑提高了聊天速度。
这种“推”技术是目前基于Socket聊天系统的主要实现技术。
在基于Socket的聊天系统,客户端和服务器必须保持随时随地的连接。
这有别于普通Web浏览的连接方式。
在使用浏览器访问服务器时,先由客户端发出HTTP协议,然后服务器响应处理这个客户端的响应,再返回处理结果;
请求(Request)和响应(Response)是一种一对一的前后因果关系。
而在基于Socket的聊天系统中,客户端发出聊天信息的同时,客户端也在接受服务器发送过来的其他人的聊天信息,因此,请求和响应不存在那种前后对应关系,是两种分别独立进行的进程。
因为服务器任何时候都可能发送信息到客户端,因此,客户端和服务器一旦建立连接,必须能让服务器在以后发送中寻找定位到这个连接。
网络聊天系统使该系统的用户能够通过客户端登入到该系统,然后直接与系统交互。
首先,需启动服务器,进行服务器的配置,进行正确的服务器配置和数据库连接并测试成功后,开启服务器。
接下来,在客户端,该系统的用户能够通过登陆界面进入,然后直接与系统交互,进行文字传送。
本系统支持的活动列表如下:
(1)配置服务器,设置IP及端;
(2)开启服务器;
(3)对离线用户进行删除管理;
(4)用户登陆系统;
(5)用户与系统交互,进行文字传送;
(6)用户好友登陆后,自动刷新列表;
(7)传送文字,当好友不在线时,发送离线消息;
(8)上线接收离线消息;
3.1.2需求分析
该聊天程序分为服务器端和课户端两个部分。
客户端实现功能:
(1)向在线成员发送消息并接收消息。
(2)更新成员状态。
当其他成员上线或下线时,客户端及时更新成员状态。
(3)更新成员列表,当其他成员加入或者偶成员被删除时,客户端及时更新成员列表。
(4)当对方不在线时,可以向该成员发送离线消息。
(5)当用户上线时,接受其他用户的离线消息。
(6)保存聊天记录。
服务器端实现功能:
(1)维护聊天成员列表:
包括接受新成员,删除已有成员。
(2)通知客户端更新成员状态。
(3)通知客户端更新成员列表。
(4)为离线用户保存离线消息。
(5)验证密码。
(6)禁止已登陆用户再次登陆。
(7)保存用户信息。
(8)为用户保存离线消息。
关系图如图3.1所示:
图3.1关系功能图
3.2即时通信系统设计
3.2.1设计原则
考虑到系统的可重用性和伸缩性,需要将本系统的网络通信底层和应用系统分离开。
这样,基于可重用的网络通信层,可以实现其他各种实时性较高的应用系统。
本系统在架构设计上将分4个层次,如图3.2所示。
图3.2架构层次
本系统最底层是Socket通信层,将负责客户端和服务器之间快速的数据交换,它通过接口层和最上面应用层保持实时数据联系。
用户从客户端进入到本系统前,将实现统一的用户登录验证机制。
Socket底层设计分两大部分:
协议设计和连接处理设计:
协议设计和连接处理设计;
CSocket层的目的是提供底层和应用蹭一个中介媒体的作用,但是不能设计得太复杂,以免延误数据传送时间。
3.2.3工作流程
只有充分地了解了聊天程序的工作流程,才能对整个系统的理解更加深刻,聊天程序的工作流程如图3.5所示。
图3.5聊天程序的工作流程
3.2.4功能设计
网络聊天系统以网络内的用户为应用对象,经过各方面需求分析,该系统主要由服务器端和客户端两部分构成,各功能模块如图3-6所示。
图3-6网络聊天系统功能模块图
3.2.5共享数据类设计
A.用户设计:
1.用户状态设计
客户端与服务器端都拥有成员列表。
该程序将成员列表设计为三种状态
登陆状态:
当用户登陆服务器事,设置用户状态为登陆状态,服务器根据该用户列表状态发送成员列表。
在线状态:
用户在线,当两个用户都在线时,可以相互发送和接受成员列表。
离线状态:
当用户离线时,不能发送和接受消息。
在线用户之间可以直接发送消息;
对离线离线用户需要服务器转发。
转发关系如图3.7所示。
在线用户发送消息
在线用户给离线用户发送消息
图3.7转发关系图
B.用户类设计
在程序中声明CUserInfo信息类。
在该类中声明USERSTATUE枚举类型,描述用户状态。
●ONLINE:
在线状态
●OFFLINE:
离线状态
●LOGIN:
登陆状态
●UNKNOWN:
未知状态,初始化状态。
成员函数如表3.1CUserInfo成员函数,类成员变量如表3-2所示。
表3.1成员函数
函数名称
返回值
功能
CUserInfo()
无
构造函数
CUserInfo(constCUserInfo&
userInfo)
无
复制构造数
~CUserInfo()
析构函数
Init()
Void
初始成员变量
Serialize(CArchive&
ar)
void
序列化
Operator=(constCUserInfo&
CUserInfo&
赋值函数
表3.2成员变量
名称
类型
说明
m_strName
CString
名称
m_strPassword
Cstring
密码
m_eStatus
USERSTATUE
状态
m_lIP
DWORD
IP地址
m_time
CTime
时间
C.数据包类设计
在程序中声明CChatPacket类描述服务器和客户端接收和发送的数据包。
在该类中声明PACKETTYPE枚举类型。
●MESSAGE:
客户端发送的消息
●USERLIST:
用户列表
●SERVERMSG:
服务器发送的消息
未知类型
表3-3:
CChatPakcet类成员函数
功能
CChatPacket()
~CChatPacket()
析够函数
Init()
Viod
初始化成员变量
Serialize(CArchive&
ar)
Void
表3-4:
CChatPacket类成员变量
名称
类型
说明
m_type
PACKETTYPE
包类型
m_UserInfo
CUserInfo
用户信息
m_strMsg
CString
消息
m_pUserList
CObList*
用户链表
m_OfflineUserInfo
离线用户信息
m_time
CTime
日期和时间
4即时通信系统实现
4.1服务器端设计实现
4.1.1服务器端静态类图
图4.1服务器静态类图
4.1.2服务器主要类介绍
CServerDlg类:
创建服务器主窗口,管理用户信息链表,管理在线用户链表,管理离线用户链表,读取保存用户信息,读取保存离线消息等。
表4.1类成员函数
函数名称
CserverDlg
构造函数
~CServerDlg()
析构函数
StartService()
BOOL
启动服务
初始化
ProcessPendingRead(CArchive*pArchiveIn,
CArchive*pArchiveOut,CClientSocket)
接收数据
ProcessPendingAccept()
接受客户端连接请求
ReleaseChatter(CClientSocket*pClientSocket)
离线时删除用户
DeleteChatter(CClientSocket*pClientSocket)
用户登陆密码错误时删除用户
DeleteAllChatter()
删除所有在线用户
InitListCtrlSetting()
定义链表控件
InitUserList()
初始化用户链表
SaveUserList(constCObList&
obList)
保存用户信息
LoadUserList(CObList&
读取用户消息
SendUserList()
发送用户链表
CopyUserList(CObList&
复制用户链表
DeleteTempUserList(CObList&
删除临时链表
UpdateUserList(constCUserInfo&
userInfo,
CClientSocket*pClientSocket)
更新用户链表
TransmitMsg(constCChatPacket&
packet,
CClientSocket*pClientSocket)
转发离线消息
UpdateServerListCtl(constCObList&
更新服务器界面
OnInitDialog()
初始化对话框
OnRclickClientList(NMHDR*pNMHDR,LRESULT*pResult)
Void
选择列表控件消息响应函数
OnServerListDeleteMenuitem()
Void
删除用户消息响应函数
void
SaveOfflineMsg(constCObList&
保存离线消息
CListenSocket类:
派生于MFC的CSocket类,用于接受客户端的连接请