课程设计题目: 多人在线聊天室
目录
第一章 系统概述
在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似QQ,网络聊天时一类的聊天系统的发展日新月异,这些软件唯一的不足就是必须要联网或者下载到它们的服务端,要不然是没法脱离Internet使用的。
本课程设计完成的聊天系统是一个C/S体系结构网络程序的实例,其操作原理为:服务器程序会等待客户端联机,当有用户要求加入聊天室并且联机成功后,便可开始发送消息,这些消息将会以广播的方式传送给所有其他在聊天室中的成员,此聊天室为一个能在没有连接到Internet的局域网使用聊天工具。
网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠髙效的进行数据传输。IP地址可以唯一地确定Internet上的一台主机。TCP协议则提供面向应用的可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心是如何处理数据的。目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。
第二章 系统需求分析
2.1 系统任务描述
本系统是基于java开发的聊天室。如有用户聊天,服务器会显示出聊天信息。服务器端和客户端可以互相发送和接收信息,还可以查看聊天记录。如果服务器还没有启动,则客户端是不可以利用聊天室收发信息的。如果在运行过程中,服务器断开则系统会有提示。
2.2 系统功能分析
系统的功能需求
聊天室程序通常要完成以下一些基本功能:
A、启动聊天室;
B、启动服务器;
C、c/s数据交换
D、查找聊天记录;
E、关闭服务器;
F、退出聊天室。
2.3 系统可行性分析
从技术方面来说,java语言的优点主要表现在:简单、面向对象、多线程、安全性等方面。
(1)简单性
Java实现了自动的功能收集,简化了内存管理的工作,这使程序设计更简便,同时减少了出错的可能。
(2)面向对象
Java提供了简单的类机制和动态的架构模型。对象中封装了它的状态变量和方法。很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而即实现了代码的重用,又提供了—种动态的解决方案。
Java同样支持继承特性,Java的类可以从其他类中继承行为,但Java只支持类的单重继承,即每个类只能继承一个类,但可以实现多个接口。
Java支持界面,界面允许程序员定义方法但不用立即实现,一个类可以实现多个界面,利用界面可以得到多重继承的许多优点而又没有多重继承的问题。
(3)多线程
多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处的等待从而影响其他部分,这样容易实现网络上的实时交互操作。多线程保证了较高的执行效率。
(4)安全性
用于网络、分布环境下的Java必须要防止病毒的入侵,Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。
第三章 系统概要设计
3.1 系统的总体结构
系统设计是本聊天室开发的重要阶段,它直接影响目标系统的质量,是整个开发工作的核心。系统设计阶段主要任务是:在系统分析提出的逻辑模型的基础上,科学合理的进行物理模型设计。
3.1.1 系统设计思想
本系统的主要设计思想:
(1)系统需要有先进的管理理念,减少开发时间,减少财力物力,充分利用现在已有的资源。
(2)系统需要满足用户的需求。
(3)系统需要具备数据库维护功能,根据用户的需求,及时的对数据进行添加、查询操作。
3.1.2 系统总体结构设计
基于Java实现聊天室的结构图,
图3-1 聊天室系统结构图
3.2 数据库设计
本程序采用Java 1.6进行编写编译,于Access数据库进行连接,用户可以对数据库进行添加、删除、修改等操作。
数据库的表图如下:
图3-2数据库表
第四章 系统详细设计
4.1 服务器设计
4.1.1 设计过程
(1)、Board类:该类继承Thread类实现多线程,Socket的socket对象,用来建立客户端和服务器的连接。Board是构造方法:用来传递socket对象,run方法在线程开始会调用该方法应用字符输出流向客户端传递数据并应用字符输入流从客户端接收数据,利用接收的字符判断调用插入数据库操作或查询数据库操作,若插入数据库则调用insert函数将数据插入数据库,然后将收到的数据返还给客户端,若查询数据库则调用select函数,然后将查询结果返还给数据库。
(2)、ServerChat类:该类为主类,main函数中通过AccessConect的 connectAccess();方法实现与数据库的连接,然后利用ServerSocket的server对象与客户端建立连接,然后调用线程的start方法启动线程。
4.1.2 具体实现
服务器源文件为ServerChat.java,代码如下。
class Board extends Thread
{
private Socket socket;
public Board(Socket socket)
{
this.socket=socket;
}
public void run()
{
try{
String line;
String line1;
String b=new String("***");
BufferedReader sin = new BufferedReader(new InputStreamReader(socket.getInputStream()));//输入流
PrintWriter sout =new PrintWriter(socket.getOutputStream());//输出流
AccessOperation a= new AccessOperation();//操作数据库
while(true)
{
line=sin.readLine();
if(line.equals(b))
{
line=a.select();
sout.println(line);
sout.flush();
sout.println(" ");
sout.flush();
}
else
{
line=getName()+line;
a.insert(line