网络工程课程设计实训报告-基于JAVA的聊天室程序设计.doc
《网络工程课程设计实训报告-基于JAVA的聊天室程序设计.doc》由会员分享,可在线阅读,更多相关《网络工程课程设计实训报告-基于JAVA的聊天室程序设计.doc(23页珍藏版)》请在三一文库上搜索。
1、 聊天室程序设计报告题 目:聊天室程序设计院系名称: 计算机学院专业名称: 网络工程班 级: 学生姓名: 学号(8位):指导教师: 设计起止时间:2011年06月27日2011年07月01日一. 设计目的在当今信息时代,越来越多的聊天工具被应用,java语言是当今流行的网络编程语言,它具有面向对象,与平台无关,安全,多线程等特点。使用java语言不仅可以实现大型企业级的分布式应用系统,还能够为小型的的,嵌入式设备进行应用程序的开发。面向对象的开发是当今世界最流行的开发方法,它不仅具有更贴近自然地语义,而且有利于软件的维护和继承,锻炼我们熟练地应用面向对象的思想和设计方法解决实际问题的能力。此次
2、设计的题目为聊天室,可以巩固所学的java语言基础知识,增进java语言的编辑基本功,拓宽常用类库的应用,使我们通过教学环节与手段,把所学的课程及相关知识加以融会贯通,全面掌握java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。二. 设计内容运用java程序编写聊天室,实现简单的聊天功能。它是图形界面,线程,流与文件系统等技术的综合应用。其界面主要采用了java.awt包,java.swing包等。程序实现了聊天室的基本功能,其中有:1.启动服务器。2.启动登陆界面。3.进入客户端界面。4.发送信息。5.离开客户端界面。6.关闭服务器。三概要设计1首先通过继承JF
3、rame类构造服务器界面。使服务器能够为每一个客户启动一个线程,记录客户的上下线行为、登陆的ip,放送消息的时刻,监视客户的聊天记录,对于出现不文明的话语,在客户端进行屏蔽,并统计出现不文明话语的次数,超过三次提示警告信息,并将其踢出聊天室。2设计客户端程序使其能够完成正常的通信功能,并且可以更改背景颜色,设置字体颜色。3设计登录程序,使其显示登录的ip地址端口号,以及用户昵称,通过登录按钮可以调用客户端程序,实现聊天功能。1 功能模块图;2 各个模块详细的功能描述。1,服务器端功能描述:记录用户的上下线,显示系统时间,显示在线用户的用户名和ip地址,监听客户的聊天记录,刷新列表,启动服务,对
4、于重复启动,显示警告信息,屏蔽用户的不文明言语,对于多次使用不文明用语的用户将其踢出聊天室,并向客户端放送相应信息。向个客户端广播系统消息。2.登录界面显示登录的端口号,ip地址,昵称,通过按动登录按钮进入客户端界面,或取消登录操作。3.客户端功能描述;显示登录昵称,显示聊天记录,更改背景颜色,设置字体颜色,放送信息,关闭聊天窗口。四详细设计程序中引入的包:import .*;import java.io.*;import java.util.*;import java.awt.event.*;import java.awt.*;import javax.swing.*;服务器端代码中用户自定
5、义的类:类名;server作用:服务器的启动继承的类:JFrame,构造服务器界面。定义的对象:TextArea 文本域 java.awt.List 在线客户列表 ServerSocket 服务器 Socket 客户端主要的成员方法:void init() 构造服务器端的界面public void actionPerformed(ActionEvent e) 按钮监听器public void keyPressed(KeyEvent e) 键盘监听器类名:start作用: 启动服务器的线程继承的类名:thread主要的成员方法:public void run() 启动服务器的线程类名; SgSe
6、rvice继承的类名:thread主要的成员方法:public void run() 处理单个客户的线程(2)用户登录相关的类:类名:login作用:构造登录界面继承的类:JFrame实现的接口: ActionListener构造方法; public Login()主要的成员方法:public void actionPerformed(ActionEvent e) 实现登录和取消按钮的监听器类名:LoginStart继承的类:Thread主要的方法; public void run() 作用:如果登录成功,则弹出客户端聊天窗口,如果登录失败,则打印出登录失败,以告知客户(3)客户端相关的类类名
7、:Client继承的类:JFrame构造方法; public Client(PrintStream out,BufferedReader in,String name)主要的成员方法:public void receive()接受服务端发来的信息1功能函数的调用关系图2各功能函数的数据流程图服务器端开放端口,等待客户端连接接收客户端请求。监听客户端的通信客户端A发送信息 互相通信 客户端B发送信息客户下线结束3重点设计及编码/聊天室服务器import .*;import java.io.*;import java.util.*;import java.awt.event.*;import ja
8、va.awt.*;import javax.swing.*;class Server extends JFrame private TextArea msgA = new TextArea();/服务器用来输入的文本域private TextArea area = new TextArea();/服务器显示消息的文本域private TextField portT = new TextField(8888);private java.awt.List list = new java.awt.List();/在线客户列表private ServerSocket server;/服务器privat
9、e Socket client;/客户端private Map container = new HashMap();/HashMapvoid init() /设置几个面板/ Panel p1 = new Panel(); Panel p2 = new Panel(); Panel p3 = new Panel(); Panel p4 = new Panel(); Panel p5 = new Panel(); Panel p6 = new Panel(); Panel p7 = new Panel(); Panel p8 = new Panel(); Panel p9 = new Panel(
10、); Panel p10 = new Panel(); /设置两个主要的文本框 Label lb1 = new Label(服务器界面); lb1.setBackground(new Color(250,120,150); Label lb2 = new Label(port); BorderLayout border1 = new BorderLayout(); p1.setLayout(border1); p1.add(BorderLayout.CENTER, area); BorderLayout border2 = new BorderLayout(); p5.setLayout(bo
11、rder2); p5.add(BorderLayout.NORTH, p3); p5.add(BorderLayout.CENTER, msgA); BorderLayout border3 = new BorderLayout(); p7.setLayout(border3); p7.add(BorderLayout.CENTER, p1); p7.add(BorderLayout.SOUTH, p5); p7.setBackground(new Color(250,150,200); JButton startButton = new JButton(启动服务); JButton send
12、Button = new JButton(发送); JButton flushButton = new JButton(刷新列表); FlowLayout fl = new FlowLayout(FlowLayout.LEFT); p8.setLayout(fl); p8.add(lb2); p8.add(portT); p8.add(startButton); p8.add(sendButton); p8.add(flushButton); p8.setBackground(new Color(250,120,150); BorderLayout border4 = new BorderLa
13、yout(); p9.setLayout(border4); p9.add(BorderLayout.CENTER, p7); p9.add(BorderLayout.SOUTH, p8); p10.setLayout(new BorderLayout(); Label lb3 = new Label(在线用户); lb3.setBackground(new Color(250,120,150); p10.add(lb3,BorderLayout.NORTH); p10.add(list,BorderLayout.CENTER); area.setEditable(false); Border
14、Layout border = new BorderLayout(); this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent arg0) System.exit(0); ); this.setLayout(border); this.add(BorderLayout.NORTH, lb1); this.add(BorderLayout.CENTER, p9); this.add(BorderLayout.EAST, p10); this.setTitle(聊天服务器 ); this.se
15、tBounds(100, 100, 600, 550); this.setVisible(true); /启动服务按钮监听器 startButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Thread t = new Start(); t.start(); );/启动按钮监听器-end /发送按钮监听器 sendButton.addActionListener(new ActionListener() public void actionPerformed(Action
16、Event e) String msg = msgA.getText(); if (msg != null & msg != ) /如果消息不为空 Calendar ca = new GregorianCalendar(); int hh = ca.get(Calendar.HOUR_OF_DAY); int mm = ca.get(Calendar.MINUTE); int ss = ca.get(Calendar.SECOND); String time = new String(hh + : + mm + : + ss + ); broadcast(time + 系统消息: + msg)
17、;/那么广播这条系统消息 area.append(time + 系统消息: + msg + n); msgA.setText(); );/end /刷新按钮监听器 flushButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if (list != null) list.removeAll();/清空在线用户列表,以便刷新 SetMap.Entry mySet = container.entrySet(); for (IteratorMap.Entry it = myS
18、et.iterator(); it.hasNext();) /刷新列表 Map.Entry me = it.next(); String aClientName = me.getKey(); Socket aClient = me.getValue(); String aClientAddress = aClient.getInetAddress().getHostAddress(); list.add(aClientName + - + aClientAddress); /end of for /end of actionPerformed );/end msgA.addKeyListene
19、r(new KeyAdapter()/键盘监听器-按下Enter发送信息 public void keyPressed(KeyEvent e) int value = e.getKeyCode(); if(value = KeyEvent.VK_ENTER) String msg = msgA.getText(); Calendar ca = new GregorianCalendar(); int hh = ca.get(Calendar.HOUR_OF_DAY); int mm = ca.get(Calendar.MINUTE); int ss = ca.get(Calendar.SECO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络工程 课程设计 报告 基于 JAVA 聊天室 程序设计
链接地址:https://www.31doc.com/p-5026787.html