多人聊天程序课程设计报告.docx

上传人:b****1 文档编号:2419412 上传时间:2022-10-29 格式:DOCX 页数:28 大小:268.22KB
下载 相关 举报
多人聊天程序课程设计报告.docx_第1页
第1页 / 共28页
多人聊天程序课程设计报告.docx_第2页
第2页 / 共28页
多人聊天程序课程设计报告.docx_第3页
第3页 / 共28页
多人聊天程序课程设计报告.docx_第4页
第4页 / 共28页
多人聊天程序课程设计报告.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

多人聊天程序课程设计报告.docx

《多人聊天程序课程设计报告.docx》由会员分享,可在线阅读,更多相关《多人聊天程序课程设计报告.docx(28页珍藏版)》请在冰豆网上搜索。

多人聊天程序课程设计报告.docx

多人聊天程序课程设计报告

合肥学院

计算机科学与技术系

 

课程设计报告

2011~2012学年第二学期

 

课程

Java语言程序设计

课程设计名称

多人聊天程序

专业班级

09网络工程

(2)班

姓名

胡永雷

指导教师

张贯虹张艳明

2012年9月

一、需求分析

聊天工具大多数由客户端程序和服务器程序外加服务器端,本程序采用客户机/服务器架构模式。

通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能。

用多线程可完成多点对多点的聊天。

主要有两个应用程序,分别为服务器程序和客户端程序。

服务器应用程序主要用于消息转发,以及向所有用户发送系统消息等;客户端应用程序主要用于客户聊天记录的显示和信息输入。

采用Client/Server(C/S)体系结构,即客户机/服务器体系结构。

聊天服务器专门用于监控用户状态和转发消息,客户端负责接收消息的用户序列和消息文本发送到服务器。

该聊天系统实现私聊,群聊,用户登陆,退出聊天系统等功能。

二、设计

1.设计思想:

课程设计中利用JAVA实现基于C/S模式的聊天程序。

聊天室共分为服务器端和客户端两部分,服务器端程序主要负责侦听客户发来的消息,客户端登录到服务器端才可以实现正常的聊天功能。

图1-1

图1-2

2.功能设计

(1)服务器端的主要功能如下。

在特定端口上进行侦听,等待客户端连接。

用户可以配置服务端的侦听端口,默认端口为8888.

向已经连接到服务端的用户发送系统消息。

统计在线人数。

当停止服务时,断开所有用户连接。

(2)客户端的主要功能如下。

连接到已经开启聊天服务的服务端。

用户可以配置到连接服务器的IP地址和端口号。

用户可以配置连接后显示的用户名。

当服务器端开启的话,用户可以随时登录与注销。

用户可以向所有人或者某一个人发送消息。

3.详细设计

聊天室服务器端设计

聊天室服务器主要包括7个文件,他们功能如下。

(1)ChatServer.java

包含名为ChatServer的public类,其主要功能为定义服务器端的界面,添加事件侦听与事件处理。

调用ServerListen类来实现服务端用户上线与下线侦听,调用ServerReceive类来实现服务器端的消息收发。

(2)ServerListen.java

该类实现服务端用户上线与下线的侦听。

该类对用户上线下线的侦听通过调用用户链表来实现,当用户上线与下线情况发生的时候,该类会对主类的界面进行相应的修改。

(3)ServerReceive.java

该类是实现服务器消息收发的类,该类分别定义了向某用户及所有人发送消息的方法,发送消息会显示在主界面类的界面上。

(4)Portconf.java

该类继承自JDialog,是用户对服务器端侦听端口进行配置的的类。

(5)Node.java

用户链表的节点类,定义了链表中的用户。

(6)UserLinkList.java

用户链表节点的具体实现类,该类通过构造函数构造用户链表,定义了添加用户、删除用户、返回用户数、根据用户名查找用户、根据索引查找用户这五个方法。

(7)Help.java

服务器端的帮助类。

聊天室客户端设计

聊天室客户端主要包括5个文件,他们的功能如下。

(1)Chatclient.java

包含名为Chatclient的Public类,其主要功能为定义客户端的界面,添加事件侦听与事件处理。

该类定义了Connect()与Disconnect()方法实现与服务器连接与断开连接。

当SendMessege()方法来向其他用户发送带有表情的消息或者悄悄话。

(2)ClientReceive.java

该类是实现服务器端与客户端消息收发的类。

(3)ConnectConf.java

该类继承自Jdialog,是用户所要连接的服务器IP及侦听端口进行修改配置的类。

(4)UserConf.java

该类继承自Jdialog,是用户对连接到服务器时所显示的用户名进行修改配置的类。

(5)Help.java

客户端程序的帮助类。

三、调试及测试

1、调试过程中遇到的主要问题及解决方法

程序中主要问题为:

(1)套接字的通信问题

网络上两个程序通过一个双向的通信链接实现数据交换,每一端都建立一个Socket,通过对Socket的读写操作实现网络的通信功能。

Socket通信程序的基本结构的基本结构主要有创建Socket、打开连接到Socket的输入流和输出流、按照一定的协议对Socket进行读写操作、关闭Socket这四个步骤。

为了完成Socket通信,包中提供了Socket和ServerSocket这两个类,他们分别用来表示双向连接的客户端和服务器。

构造函数如下:

Socket(Inetaddressaddress,,intport)

Socket(Inetaddressaddress,intport,Booleanstream)

Socket(Stringhost,intport)

Socket(Stringhost,intport,Booleanstream)

ServerSocket(intport)

ServerSocket(intport,intcount)

通信模型中首先在客户机和服务器之间定义一套通信协议,并创立一个Socket类,利用这个类建立一条可靠的链接;客户端发出请求,服务器端监听来自客户机的请求,并为客户端提供响应服务。

要是实现套接字的服务器端,要使用SocketServer类。

它允许程序绑定一个端口等待客户端的请求,一旦产生客户端请求,它将接受这一请求,同时产生一个完整的Socket连接对象。

服务器绑定端口必须公开,以便让客户端程序知道如何连接这个服务器。

同时作为服务器,它必须能够接受多个客户的请求,这就需要为服务器设置一个请求队列。

由于存在单个服器与多个客户程序通信,所以服务程序响应客户程序不应花很多时间,否则客户程序在得到服务前有可能花很多时间来等待通信的建立,然而服务程序和客户程序的会话可能很长,因此为加快对客户程序连接请求的响应,典型的方法是服务器主机运行一个后台线程,这个后台线程处理服务程序和客户程序的通信。

(2)数据报通信问题

Java通过DatagramPacket和DatagramSocket两个类来实现UDP协议顶层的数据报。

DatagramPacket生成的对象表示一个数据报,而DatagramSocket是用来发送和接受数据包的类。

生成DatagramPacket对象可以通过四个构造函数:

DatagramPacket(bytedata[],intsize)

DatagramPacket(bytedata[],intoffset,intsize)

DatagramPacket(bytedata[],intsize,InetAddressipAddress,intport)

DatagramPacket(bytedata[],intoffset,intsize,InetAddressipAddress,intport)

对于DatagramPacket内部状态,可以使用如下方法获得:

InetAddressgetAddress()

返回目标文件InetAddress,一般用于发送。

intgetPort()

返回端口号。

byte[]getData()

返回包含在数据包中的字节数组数据。

intgetLength()

返回包含在将从getData()方法中返回字节数组的有效数据长度。

DatagramSocket类用来发送和结束数据包。

需要首先建立DatagramSocket对象来接收或发送数据报,然后使用DatagramPacket类对象作为传输数据的载体。

DatagramSocket类常用的构造函数:

DatagramSocket()

DatagramSocket(intport)

DatagramSocket(intport,InetAddressipAddress)

DatagramSocket接收数据报要用receive(DatagramSocketp)方法,而发送数据报则使用send(DatagramSocketp)方法。

要发送一个数据报首先要创建一个DatagramPacket,指定要发送的数据、数据长度、数据要发送到哪个主机和端口,然后在用DatagramSocket的send()方法发送数据包;接收一个数据报必须创建一个在本地主机的特定端口上侦听的DatagramSocket,此套接字只能接收发送至特定端口上的数据包。

2、对设计和编码的回顾讨论和分析

在本程序中,用户的存储时通过链表来实现的。

用了UserLinkList定义了链表及其操作,Node定义了用户链表节点。

用户链表的结点类:

publicclassNode{

Stringusername=null;

Socketsocket=null;

ObjectOutputStreamoutput=null;

ObjectInputStreaminput=null;

Nodenext=null;

}

用户链表

publicclassUserLinkList{

Noderoot;

Nodepointer;

intcount;

构造用户链表

publicUserLinkList(){

root=newNode();

root.next=null;

pointer=null;

count=0;

}

添加用户

publicvoidaddUser(Noden)

删除用户

publicvoiddelUser(Noden)

返回用户数

publicintgetCount()

根据用户名查找用户

publicNodefindUser(Stringusername)

根据索引查找用户

publicNodefindUser(intindex)

3、程序运行的时空效率分析

本程序应用了线程对端口进行侦听。

线程一直后台开启,长期占用系统资源,但又能及时的实现端口监听和消息的收发。

4、测试数据集

服务器端程序主界面:

图1-3

服务器侦听端口的配置:

图1-4

服务器端帮助窗口:

图1-5

服务器端启动时的界面:

图1-6

确认停止服务器:

图1-7

客户端用户名配置界面:

图1-8

客户端帮助界面:

图1-9

客户端程序运行主界面:

图1-10

服务端关闭界面:

图1-11

四、经验和体会

经过一个学期的JAVA课程学习了解了JAVA的基础理论知识,通过这次程序设计,进一步巩固、加深了我们所学专业课程的基本理论知识,理论联系实际,进一步培养了综合分析问题,解决问题的能力,进一步加强了JAVA的实际应用能力。

通过本次Java语言课程设计,我对面向对象的程序设计有了更深程度的掌握,它将重点放在对象与对象的接口上。

在通过对题目进行需求分析,考虑一些编程中可能遇到的问题。

其次开始界面设计、类的设计、类功能的连接等等实现。

在遇到问题解决问题的过程中不断完善功能。

同时在老师和同学的帮助下,不断完善自己的成果,不断改进,不断进步。

这次Java课程设计不仅考查了对Java语言基本理论知识的学习

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1