JAVA聊天室程序设计实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JIANGXI AGRICULTURAL UNIVERSITY JAVA课程设计报告

题目:聊天室程序设计

学院:

姓名:

学号:

专业:

年级:

指导教师:

2011年12月

一、系统需求分析

1、课题背景

在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似QQ、MSN,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个有简单聊天功能的网络聊天程序;而且通过制作该程序还能更好的学习网络软件编程知识。

本课程适用于软件工程等本科专业。参加本课程设计的学生,应当认真完成本课程设计的全部过程。并以最终课程设计成果来证明其独立完成各种实际任务的能力。从而,反映出理解和运用本课程知识的水平和能力。

2、功能要求

运用java程序编写聊天室,实现简单的聊天功能。它是图形界面,线程,流与文件系统等技术的综合应用。其界面主要采用了java.awt包,java.swing包以及java.util包等。程序实现了聊天室的基本功能,其中有:

1、启动服务器。

2、进入客户端界面。

3、登录聊天室。

4、发送信息(实现按回车键发送消息)。

5、关闭服务器。

3、运行环境

本程序基于java和UltraEdit开发环境,可以在一般的装有windows系统的主机上运行。

4、功能实现

1、采用套接字实现网络中的数据传输

2、尽量使用某个或某些应用层的协议实现系统的部分功能

3、系统设计规范合理,操作流程方便简单

二、系统总体设计

1、设计思路

聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。

1.首先通过继承JFrame类构造服务器界面。

2.设计客户端程序使其能够完成正常的通信功能,并且可以更改背景颜色,设置字体颜色。3.设计侦听程序,使其显示登录的ip地址端口号,以及用户昵称,通过侦听按钮可以调用客户端程序,实现聊天功能。

2、各个模块详细的功能描述。

1、服务器端功能描述:

启动服务器端。

2、客户端功能描述:

启动客户端;

显示登录昵称:

显示系统时间:

显示聊天记录:

发送信息(实现按回车键发送消息);

退出聊天室。

三、系统详细设计

1、界面设计

主要由类ChatRoom来实现,界面实际总体如下:输入昵称的文本框,输入IP地址的文本框以及输入端口的文本框(可设置背景色);侦听,连接的按钮(可设置字体);推出按钮;接受消息的文本域(可设置前景色);发送消息文本框;发送按钮;插入图片。

2、详细代码设计

聊天室程序设计详细代码如下:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import .*;

import java.io.*;

import java.util.*;

public class ChatRoom extends JFrame implements ActionListener,Runnable,KeyListener

{

Image Image;

private TextArea ta;

private JTextField ip;

private JTextField port;

private JButton ss_server;

private JButton ss_client;

private JTextField send_text;

private JTextField name;

private JButton ss_send;

private JButton ss_exit;

private Socket skt;

public void keyReleased(KeyEvent f){}

public void keyPressed(KeyEvent f){

if(f.getKeyCode()==KeyEvent.VK_ENTER){

try{

PrintWriter pw=new PrintWriter(skt.getOutputStream());

String s1=name.getText();

String s=send_text.getText();

if(s==null)return;

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+"");

ta.append(time+s1+"说:"+"\n"+s+"\n");

String s3=time+s1+"说:"+"\n"+s;

pw.println(s3);

pw.flush();

send_text.setText("");

}

catch(Exception e){

ta.append("发送失败!\n");

}

}

}

public void keyTyped(KeyEvent f){}

public void run()

{

try{

BufferedReader br=new BufferedReader(new InputStreamReader(skt.getInputStream()));

while(true){

String s=br.readLine();

if(s==null)break;

ta.append(s+"\n");

}

}

catch(Exception e){

e.printStackTrace();

}

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==ss_server){

相关文档
最新文档