视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
java聊天室程序设计实验报告
2025-09-24 00:10:40 责编:小OO
文档


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 java.net.*;

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){

            doServer();

        }

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

            doClient();

        }

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

            doSend();

        }

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

            doexit();

        }

    }

    

    public void doServer()

    {

    try{

        ServerSocket server = new ServerSocket(Integer.parseInt(port.getText()));

        skt = server.accept();

        ta.append("连接服务器成功!\\n");

        new Thread(this).start();

    }

    catch(Exception e){

        ta.append("服务器启动失败!\\n");

    }

    }

    

    public void doClient()

    {

    try{

        skt = new Socket(ip.getText(), Integer.parseInt(port.getText()));

        ta.append("连接服务器成功!\\n");

        new Thread(this).start();

    }

    catch(Exception e){

        ta.append("连接失败!\\n");

    }        

    }

    

    public void doSend()

    {

        

    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 doexit()

    {

        

        System.exit(0);

        }

    

    public ChatRoom()

    {

        Panel a1 = new Panel();

    Panel a2 = new Panel();

    Panel a3 = new Panel();

        this.setTitle("聊天室");

        this.setBounds(200,200,600,500);

        Container cc = this.getContentPane();

        

        JPanel p1 = new JPanel();

        cc.add(p1, BorderLayout.NORTH);

        p1.setBackground(new Color(200,200,250));

        

        ta = new TextArea();

        cc.add(ta, BorderLayout.CENTER);

        JPanel p2 = new JPanel();

        cc.add(p2, BorderLayout.SOUTH);

        p2.setBackground(new Color(250,150,200));

        ta.setForeground(new Color(0,0,250));

    

        cc.add(p3, BorderLayout.EAST);

        

        p1.add(new JLabel("昵称:"));

        name=new JTextField("",6);

        p1.add(name);

    name.setFont(new Font("宋体",Font.BOLD,14));

        p1.add(new JLabel("IP: "));

        ip = new JTextField("127.0.0.1", 15);

        p1.add(ip);

        p1.add(new JLabel("Port: "));

        port = new JTextField("7777", 4);

        p1.add(port);

        ss_server = new JButton("侦听");

        ss_server.setForeground(new Color(150,100,250));

        ss_server.setFont(new Font("宋体",Font.BOLD,14));

        p1.add(ss_server);

        ss_client = new JButton("连接");

        ss_client.setForeground(new Color(150,100,250));

        ss_client.setFont(new Font("宋体",Font.BOLD,14));

        p1.add(ss_client);

        ss_exit = new JButton("退出");

        ss_exit.setForeground(new Color(150,100,250));

        ss_exit.setFont(new Font("宋体",Font.BOLD,14));

            p1.add(ss_exit);

     

        p2.setLayout(new BorderLayout());

        p2.add(new JLabel("发送消息:"),BorderLayout.WEST);

        p2.setBackground(new Color(200,200,250));

        send_text = new JTextField("在?");

        p2.add(send_text, BorderLayout.CENTER);

        ss_send = new JButton("发送");

        p2.add(ss_send, BorderLayout.EAST);

        

        ss_exit.addActionListener(this);

    send_text.addKeyListener(this);

        ss_server.addActionListener(this);

        ss_client.addActionListener(this);        

        ss_send.addActionListener(this);        

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        

    }

    public static void main(String[] args)

    {

        new ChatRoom().setVisible(true);

    }

}

四、出现的问题以及解决办法

1、书上的关于系统时间的显示在本程序中会出错,于是通过在网上找的一种方法实现了系统时间的显示,将其输出到客服端显示;

2、关于实现用回车键发送消息,一开始在最后忘记添加一个addKeyListener,运行结果没有达到预期效果。后经过与同学讨论交流成功实现。

3、有时是关联问题,以及输出显示格式,获取信息一些细节步骤如果出错就会产生意想不到的错误,无法解决,还越改越乱。所以要养成一步一步的修改,避免不可恢复,造成重大的损失。

五、运行结果

1、连接服务器

2、发送消息

3、退出程序

聊天程序运行成功!

六、小结

这次设计经过长期的不懈努力,程序基本满足聊天的需要。完成后的程序实现了用户登陆聊天室、用户在线聊天、用户退出等功能。

程序设计期间,通过询问老师,同学和网上搜索相关解答等多种方式学习到很多课堂上没有的知识,还积累了一定的实践经验,增强了动手能力和解决实际问题的能力。在此之前,对于Java编程技术或网络socket编程知识都只是略知皮毛,缺乏深入的认识,对其工作方式和原理缺乏透彻的认识。在这段时间里,我认真学习了Java语言开发,Applet小程序实现,对编程思想有了进一步的体会,养成了一些良好的编程习惯。程序虽然完成,但是距离优秀仍存在一定差距,用JAVA开发大型项目还有很多我需要去努力学习的知识。希望自己能不断学习和实践,争取以后做得更好。

限于我的知识水平和经验有限,此程序还有许多有待完善和改正的地方,恳请老师批评指正。下载本文

显示全文
专题