聊天室课程设计报告.docx_第1页
聊天室课程设计报告.docx_第2页
聊天室课程设计报告.docx_第3页
聊天室课程设计报告.docx_第4页
聊天室课程设计报告.docx_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

滨江学院 数据库原理课程设计题 目 局域网聊天室 院 系 花旗营 专 业 网络工程 学生姓名 王强 学 号 20108346030 指导教师 黄海彬 二一三 年 十月 二十日目录第一章 前言 3第二章 需求分析与系统设计 4第三章 系统实施 5第四章 测试 14第1章 引言1.1 背景网络聊天室通常直称聊天室,是一种人们可以在线交谈的网络论坛,在同一聊天室的人们通过广播消息进行实时交谈。聊天室可以建立在即时通讯软件(如MSN Messenger、QQ)、P2P软件、万维网(如 Halapo,Meebo ) 等基础上,万维网方式更为普通和种类繁多,交谈的手段不局限于文本,更包括语音、视频。通常聊天室是按照房间或频道为单位的,在同一房间或频道的网人可以实时地广播和阅读公开消息。一般情况下,与其它网络论坛、即时通讯不同的是,聊天室不保存聊天记录。1.2 相关技术1.2.1 JAVA概述Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。1.2.2 SocketSocket是java中需一要编写较低层次的网络通信程序(例如Cljent/server应用程序)时提供的一种通讯机制。Socket是两个程序进行双向数据传输的网络通信的端点,一般由一个地址加上一个端口号来标一识。每个服务程序都在一个众所周知的端口上提供服务,而想使用服务的客户端程序则需要连接该端口。通过Socket的数据是原始字节流信息,通信双方必须根据约定的协议对数据进行处理与解释。 Socket通信机制提供了两种通信.方式:有连接方式(TCP)和无连接方式(UDP数据报)。有连接方式中,通信双方在开始时必须进行一次连接过程,建立一条通信链路。通信链路提供了可靠的,全双工的字节流服务。无连接力一式中,通信双方不存在一个连接过程,一次网络I/O以一个数据报形式进行,而每次网络I /O可以和不同.主机的不同进程进行。无连接方式开销小于有连接方式,但是所提供的数据传输服务不可靠,不能保证数据报一定到达目的地”。 JAVA的有连接通信采用流式I/O模式。Socket是两个进程间通信链的端点,每个Sockct有两个流:一个输入流和一个输出流。只要向Sockct的输出流写,一个进程就可以通过网络连接向其他进程发送数据;同样,通过读Sockt的输入流,就可以读取传输来的数据。 有连接通信一般要经历以下四个基本步骤 (1)创建Sockct,建立连接; (2)打开连接到Sockct的输入/输出流; (3)按照一定的一脚议对Socket进行读/写操作; (4)关闭Socket。 第(3)步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同。1.2.3 TCP 三次握手TCP协议通过三个报文段完成连接的建立,这个过程称为三次握手(three-way handshake),过程如下图所示。第2章 需求分析与系统设计2.1 需求分析从技术发面来看,Java语言的优点一要表现在:简.单、面向对象、多线程、安全性等方面。1.简单性 Java与C+语言灰常相近,但Java比C+简单,它抛弃了C+中的一些不是绝对必要的功能,如头文件、顶处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。Java实现了自动的垃圾收集,简化了内存管理的一作。这使程序一设计更加简便,同时减少了出错的可能。2.面向对象 Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的一方法,从而既实现了代码的复用,又提供了一种动态的解决方案。 Java是一种完全面向对象的程序设计语一言,它除了数组、布尔和字符二个基本数据类型外的其它类都是对象,它不再支持全局变量。在Java中,如果不创建新类就无法创建程序,Java程序在运行时必须先创建一个类的实例,然后才能提交运行。 Java同样支持继承特性,Java的类可以从其它类中继承行为,但Java只支持类的单重继承,即每个类只能从一个类中继承。 Java支持界面,界面允许程序员定义方法但又不立即实现,一个类可以实现多个界面,利用界面可以得到多重继承的许多优点而又没有多重继承的问题。3.多线程 多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容.易实现网络上的实时交互操作。 Java程序可以有多个执行线程,如可以让一个线程进行复杂的计算,而让另一个线程与用户进行交互,这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保证了较高的执行效率。4.安全性 Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。2.2 系统设计2.2.1系统功能聊天室程序通常需要完成以下一些基本功能: (1)登录聊天室; (2)启动服务器; (3)关闭服务器; (4)用户之间的聊天; (5)退出聊天室。本系统其体功能需求如下: (1) 用户都只需要在登录界面输入任意用户名后即可登录到界面中去。 (2)一个用户退出聊天室对其他用户不能产生影响,而服务器断开与客户端的连接则所有的用户都失去与服务器的连接。 (3)用户的聊天信息录入,发送,接收方便,快捷。 (4)聊天室系统运行稳定、安全性高、性能可靠。第3章 系统实施3.1服务器端代码如下:package chat_423;import java.io.*;import .*;import java.util.*;public class ChatServer String name = null;boolean started = false;ServerSocket ss = null;List clients = new ArrayList();public static void main(String args) new ChatServer().start();/启动服务器 public void start() try ss = new ServerSocket(8888);started = true; catch (BindException e) System.out.println(端口使用中.);System.out.println(请关掉相关程序并重新运行服务器!);System.exit(0); catch (IOException e) e.printStackTrace();try while (started) Socket s = ss.accept();Client c = new Client(s);System.out.println(客户端连接成功!);new Thread(c).start();clients.add(c); catch (IOException e) e.printStackTrace(); finally try ss.close(); catch (IOException e) e.printStackTrace();class Client implements Runnable private Socket s;private DataInputStream dis = null;private DataOutputStream dos = null;private boolean bConnected = false;public Client(Socket s) this.s = s;try dis = new DataInputStream(s.getInputStream();dos = new DataOutputStream(s.getOutputStream();bConnected = true; catch (IOException e) e.printStackTrace();public void send(String str) try dos.writeUTF(str); catch (IOException e) clients.remove(this);System.out.println(对方退出了!我从List里面去掉了!);public void run() try while (bConnected) String str = dis.readUTF();System.out.println(str);for (int i = 0; i clients.size(); i+) Client c = clients.get(i);c.send(str); catch (EOFException e) System.out.println(客户端关闭!); catch (IOException e) e.printStackTrace();finally try if (dis != null)dis.close();if (dos != null)dos.close();if (s != null) s.close(); catch (IOException e1) e1.printStackTrace();3.2 客户端代码如下:package chat_423;import java.awt.*;import java.awt.event.*;import java.io.*;import .*;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class ChatClient extends Frame String st = null; Socket s = null; DataOutputStream dos = null; DataInputStream dis = null; private boolean bConnected = false; TextField tfTxt = new TextField(); TextArea taContent = new TextArea(); Thread tRecv = new Thread(new RecvThread(); public ChatClient(String s) this.st = s; / 聊天窗口 public void launchFrame() this.setTitle(st); setLocation(400, 300); this.setSize(300, 300); add(tfTxt, BorderLayout.SOUTH); add(taContent, BorderLayout.NORTH); pack(); this.addWindowListener(new WindowAdapter() Override public void windowClosing(WindowEvent arg0) disconnect(); System.exit(0); ); tfTxt.addActionListener(new TFListener(); setVisible(true); connect(); tRecv.start(); / 连接服务器 public void connect() try s = new Socket(, 8888); dos = new DataOutputStream(s.getOutputStream(); dis = new DataInputStream(s.getInputStream(); System.out.println(连接成功!); bConnected = true; catch (UnknownHostException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); / 关闭窗口 public void disconnect() try dos.close(); dis.close(); s.close(); catch (IOException e) e.printStackTrace(); private class TFListener implements ActionListener public void actionPerformed(ActionEvent e) String str = tfTxt.getText().trim(); tfTxt.setText(); try dos.writeUTF(new SimpleDateFormat(yyyy.MM.dd HH:mm:ss).format(new Date() + n + st + : + str); dos.flush(); catch (IOException e1) e1.printStackTrace(); private class RecvThread implements Runnable public void run() try while (bConnected) String str = dis.readUTF(); taContent.setText(taContent.getText() + str + n); catch (SocketException e) System.out.println(退出了!); catch (EOFException e) System.out.println(退出了!); catch (IOException e) e.printStackTrace(); 3.3登录界面代码如下:package myqq;import java.awt.BorderLayout;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;import chat_423.ChatClient;public class Login private JFrame jf = new JFrame(MyQQ); private JPanel jp1 = new JPanel(); private JPanel jp2 = new JPanel(); private JPanel jp3 = new JPanel(); private JLabel jl = new JLabel(欢迎使用MyQQ); private JLabel j2 = new JLabel(用户名, JLabel.CENTER); private JTextField jt1 = new JTextField(请输入用户名); private JButton jb2 = new JButton(登陆); public Login() jp1.add(jl); jp2.setLayout(new GridLayout(3, 1); jp2.add(j2); jp2.add(jt1); jp3.setLayout(new FlowLayout(); jp3.add(jb2); jf.setLayout(new Bor

温馨提示

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

评论

0/150

提交评论