多人聊天程序课程设计报告.doc_第1页
多人聊天程序课程设计报告.doc_第2页
多人聊天程序课程设计报告.doc_第3页
多人聊天程序课程设计报告.doc_第4页
多人聊天程序课程设计报告.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

长春理工大学计算机科学与技术系课程设计报告20102011学年第二学期课程设计名称 多人聊天程序学号 080511320姓名李旭坤2011年6月一、需求分析聊天工具大多数由客户端程序和服务器程序外加服务器端,本程序采用客户机/服务器架构模式。通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能。用多线程可完成多点对多点的聊天。主要有两个应用程序,分别为服务器程序和客户端程序。服务器应用程序主要用于消息转发,以及向所有用户发送系统消息等;客户端应用程序主要用于客户聊天记录的显示和信息输入。采用Client/Server(C/S)体系结构,即客户机/服务器体系结构。聊天服务器专门用于监控用户状态和转发消息,客户端负责接收消息的用户序列和消息文本发送到服务器。该聊天系统实现私聊,群聊,用户登陆,退出聊天系统等功能。二. 设计1设计思想: 课程设计中利用JAVA实现基于C/S模式的聊天程序。聊天室共分为服务器端和客户端两部分,服务器端程序主要负责侦听客户发来的消息,客户端登录到服务器端才可以实现正常的聊天功能。2功能设计 (1)服务器端的主要功能如下。 在特定端口上进行侦听,等待客户端连接。用户可以配置服务端的侦听端口,默认端口为8888.当停止服务时,断开所有用户连接。 (2)客户端的主要功能如下。 连接到已经开启聊天服务的服务端。 当服务器端开启的话,用户可以随时登录与注销。 用户可以向所有人发送消息。3详细设计 聊天室服务器端设计 聊天室服务器主要包括2个文件,他们功能如下。 (1)ServerAll.java包含名为ChatServer的public类,其主要功能为定义服务器端的界面,添加事件侦听与事件处理。调用ServerListen 类来实现服务端用户上线与下线侦听,调用ServerReceive类来实现服务器端的消息收发。(2)ServerThread.java该类实现服务端用户上线与下线的侦听。该类对用户上线下线的侦听通过调用用户链表来实现,当用户上线与下线情况发生的时候,该类会对主类的界面进行相应的修改。聊天室客户端设计聊天室客户端主要包括5个文件,他们的功能如下。(1)Begin.java 包含名为 Chatclient的Public类,其主要功能为定义客户端的界面,添加事件侦听与事件处理。该类定义了Connect()与Disconnect()方法实现与服务器连接与断开连接。当SendMessege()方法来向其他用户发送带有表情的消息或者悄悄话。(2)Register.java该类是实现服务器端与客户端消息收发的类。(3)See.java该类继承自Jdialog,是用户所要连接的服务器IP及侦听端口进行修改配置的类。(4)ServerAll.java该类继承自Jdialog,是用户对连接到服务器时所显示的用户名进行修改配置的类。(5)ServerOne.java该类继承自Jdialog,是用户对连接到服务器时所显示的用户名进行修改配置的类。三. 调试及测试1、调试过程中遇到的主要问题及解决方法程序中主要问题为:(1)套接字的通信问题网络上两个程序通过一个双向的通信链接实现数据交换,每一端都建立一个Socket,通过对Socket的读写操作实现网络的通信功能。Socket通信程序的基本结构的基本结构主要有创建Socket、打开连接到Socket的输入流和输出流、按照一定的协议对Socket进行读写操作、关闭Socket这四个步骤。为了完成Socket通信, 包中提供了Socket 和ServerSocket这两个类,他们分别用来表示双向连接的客户端和服务器。构造函数如下:Socket(Inetaddress address,int port)Socket (Inetaddress address, int port, Boolean stream)Socket (String host ,int port)Socket (String host ,int port, Boolean stream)ServerSocket (int port)ServerSocket ( int port, int count)通信模型中首先在客户机和服务器之间定义一套通信协议,并创立一个Socket类,利用这个类建立一条可靠的链接;客户端发出请求,服务器端监听来自客户机的请求,并为客户端提供响应服务。要是实现套接字的服务器端,要使用SocketServer类。它允许程序绑定一个端口等待客户端的请求,一旦产生客户端请求,它将接受这一请求,同时产生一个完整的Socket连接对象。服务器绑定端口必须公开,以便让客户端程序知道如何连接这个服务器。同时作为服务器,它必须能够接受多个客户的请求,这就需要为服务器设置一个请求队列。由于存在单个服器与多个客户程序通信,所以服务程序响应客户程序不应花很多时间,否则客户程序在得到服务前有可能花很多时间来等待通信的建立,然而服务程序和客户程序的会话可能很长,因此为加快对客户程序连接请求的响应,典型的方法是服务器主机运行一个后台线程,这个后台线程处理服务程序和客户程序的通信。(2)数据报通信问题 Java通过DatagramPacket和DatagramSocket两个类来实现UDP协议顶层的数据报。DatagramPacket生成的对象表示一个数据报,而DatagramSocket是用来发送和接受数据包的类。生成DatagramPacket对象可以通过四个构造函数:DatagramPacket( byte data ,int size )DatagramPacket( byte data ,int offset, int size)DatagramPacket( byte data ,int size, InetAddress ipAddress, int port )DatagramPacket( byte data , int offset, int size, InetAddress ipAddress, int port)对于DatagramPacket内部状态,可以使用如下方法获得:InetAddress getAddress()返回目标文件InetAddress,一般用于发送。int getPort()返回端口号。byte getData()返回包含在数据包中的字节数组数据。 int getLength() 返回包含在将从getData()方法中返回字节数组的有效数据长度。DatagramSocket类用来发送和结束数据包。需要首先建立DatagramSocket对象来接收或发送数据报,然后使用DatagramPacket类对象作为传输数据的载体。DatagramSocket类常用的构造函数: DatagramSocket() DatagramSocket(int port) DatagramSocket(int port,InetAddress ipAddress)DatagramSocket接收数据报要用receive(DatagramSocket p)方法,而发送数据报则使用send(DatagramSocket p)方法。要发送一个数据报首先要创建一个DatagramPacket,指定要发送的数据、数据长度、数据要发送到哪个主机和端口,然后在用DatagramSocket的send()方法发送数据包;接收一个数据报必须创建一个在本地主机的特定端口上侦听的DatagramSocket,此套接字只能接收发送至特定端口上的数据包。2、对设计和编码的回顾讨论和分析在本程序中,用户的存储时通过链表来实现的。用了UserLinkList定义了链表及其操作,Node定义了用户链表节点。用户链表的结点类:public class Node String username = null;Socket socket = null;ObjectOutputStream output = null;ObjectInputStream input = null;Node next = null;用户链表public class UserLinkList Node root;Node pointer;int count;构造用户链表public UserLinkList()root = new Node();root.next = null;pointer = null;count = 0;添加用户public void addUser(Node n)删除用户public void delUser(Node n)返回用户数public int getCount()根据用户名查找用户public Node findUser(String username)根据索引查找用户public Node findUser(int index)3、程序运行的时空效率分析本程序应用了线程对端口进行侦听。线程一直后台开启,长期占用系统资源,但又能及时的实现端口监听和消息的收发。4、测试数据集服务器端程序主界面:客户端登陆界面:客户端注册界面:客户端注册成功界面:客户端程序运行主界面:聊天测试界面:四、经验和体会。经过课程设计我学习了解了JAVA的基础理论知识,通过这次程序设计,进一步巩固、加深了我们所学专业课程的基本理论知识,理论联系实际,进一步培养了综合分析问题,解决问题的能力,进一步加强了JAVA的实际应用能力。通过本次Java语言课程设计,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论