java聊天室程序设计实验报告.docx
- 文档编号:4585671
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:14
- 大小:406.38KB
java聊天室程序设计实验报告.docx
《java聊天室程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《java聊天室程序设计实验报告.docx(14页珍藏版)》请在冰点文库上搜索。
java聊天室程序设计实验报告
JIANGXIAGRICULTURALUNIVERSITY
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、详细代码设计
聊天室程序设计详细代码如下:
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
import.*;
importjava.io.*;
importjava.util.*;
publicclassChatRoomextendsJFrameimplementsActionListener,Runnable,KeyListener
{
ImageImage;
privateTextAreata;
privateJTextFieldip;
privateJTextFieldport;
privateJButtonss_server;
privateJButtonss_client;
privateJTextFieldsend_text;
privateJTextFieldname;
privateJButtonss_send;
privateJButtonss_exit;
privateSocketskt;
publicvoidkeyReleased(KeyEventf){}
publicvoidkeyPressed(KeyEventf){
if(f.getKeyCode()==KeyEvent.VK_ENTER){
try{
PrintWriterpw=newPrintWriter(skt.getOutputStream());
Strings1=name.getText();
Strings=send_text.getText();
if(s==null)return;
Calendarca=newGregorianCalendar();
inthh=ca.get(Calendar.HOUR_OF_DAY);
intmm=ca.get(Calendar.MINUTE);
intss=ca.get(Calendar.SECOND);
Stringtime=newString(hh+":
"+mm+":
"+ss+"");
ta.append(time+s1+"说:
"+"\n"+s+"\n");
Strings3=time+s1+"说:
"+"\n"+s;
pw.println(s3);
pw.flush();
send_text.setText("");
}
catch(Exceptione){
ta.append("发送失败!
\n");
}
}
}
publicvoidkeyTyped(KeyEventf){}
publicvoidrun()
{
try{
BufferedReaderbr=newBufferedReader(newInputStreamReader(skt.getInputStream()));
while(true){
Strings=br.readLine();
if(s==null)break;
ta.append(s+"\n");
}
}
catch(Exceptione){
e.printStackTrace();
}
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==ss_server){
doServer();
}
if(e.getSource()==ss_client){
doClient();
}
if(e.getSource()==ss_send){
doSend();
}
if(e.getSource()==ss_exit){
doexit();
}
}
publicvoiddoServer()
{
try{
ServerSocketserver=newServerSocket(Integer.parseInt(port.getText()));
skt=server.accept();
ta.append("连接服务器成功!
\n");
newThread(this).start();
}
catch(Exceptione){
ta.append("服务器启动失败!
\n");
}
}
publicvoiddoClient()
{
try{
skt=newSocket(ip.getText(),Integer.parseInt(port.getText()));
ta.append("连接服务器成功!
\n");
newThread(this).start();
}
catch(Exceptione){
ta.append("连接失败!
\n");
}
}
publicvoiddoSend()
{
try{
PrintWriterpw=newPrintWriter(skt.getOutputStream());
Strings1=name.getText();
Strings=send_text.getText();
if(s==null)return;
Calendarca=newGregorianCalendar();
inthh=ca.get(Calendar.HOUR_OF_DAY);
intmm=ca.get(Calendar.MINUTE);
intss=ca.get(Calendar.SECOND);
Stringtime=newString(hh+":
"+mm+":
"+ss+"");
ta.append(time+s1+"说:
"+"\n"+s+"\n");
Strings3=time+s1+"说:
"+"\n"+s;
pw.println(s3);
pw.flush();
send_text.setText("");
}
catch(Exceptione){
ta.append("发送失败!
\n");
}
}
publicvoiddoexit()
{
System.exit(0);
}
publicChatRoom()
{
Panela1=newPanel();
Panela2=newPanel();
Panela3=newPanel();
this.setTitle("聊天室");
this.setBounds(200,200,600,500);
Containercc=this.getContentPane();
JPanelp1=newJPanel();
cc.add(p1,BorderLayout.NORTH);
p1.setBackground(newColor(200,200,250));
ta=newTextArea();
cc.add(ta,BorderLayout.CENTER);
JPanelp2=newJPanel();
cc.add(p2,BorderLayout.SOUTH);
p2.setBackground(newColor(250,150,200));
ta.setForeground(newColor(0,0,250));
JLabelp3=newJLabel(newImageIcon("2010.jpg"));
cc.add(p3,BorderLayout.EAST);
p1.add(newJLabel("昵称:
"));
name=newJTextField("",6);
p1.add(name);
name.setFont(newFont("宋体",Font.BOLD,14));
p1.add(newJLabel("IP:
"));
ip=newJTextField("127.0.0.1",15);
p1.add(ip);
p1.add(newJLabel("Port:
"));
port=newJTextField("7777",4);
p1.add(port);
ss_server=newJButton("侦听");
ss_server.setForeground(newColor(150,100,250));
ss_server.setFont(newFont("宋体",Font.BOLD,14));
p1.add(ss_server);
ss_client=newJButton("连接");
ss_client.setForeground(newColor(150,100,250));
ss_client.setFont(newFont("宋体",Font.BOLD,14));
p1.add(ss_client);
ss_exit=newJButton("退出");
ss_exit.setForeground(newColor(150,100,250));
ss_exit.setFont(newFont("宋体",Font.BOLD,14));
p1.add(ss_exit);
p2.setLayout(newBorderLayout());
p2.add(newJLabel("发送消息:
"),BorderLayout.WEST);
p2.setBackground(newColor(200,200,250));
send_text=newJTextField("在?
");
p2.add(send_text,BorderLayout.CENTER);
ss_send=newJButton("发送");
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);
}
publicstaticvoidmain(String[]args)
{
newChatRoom().setVisible(true);
}
}
四、出现的问题以及解决办法
1、书上的关于系统时间的显示在本程序中会出错,于是通过在网上找的一种方法实现了系统时间的显示,将其输出到客服端显示;
2、关于实现用回车键发送消息,一开始在最后忘记添加一个addKeyListener监听器,运行结果没有达到预期效果。
后经过与同学讨论交流成功实现。
3、有时是关联问题,以及输出显示格式,获取信息一些细节步骤如果出错就会产生意想不到的错误,无法解决,还越改越乱。
所以要养成一步一步的修改,避免不可恢复,造成重大的损失。
五、运行结果
1、连接服务器
2、发送消息
3、退出程序
聊天程序运行成功!
六、小结
这次设计经过长期的不懈努力,程序基本满足聊天的需要。
完成后的程序实现了用户登陆聊天室、用户在线聊天、用户退出等功能。
程序设计期间,通过询问老师,同学和网上搜索相关解答等多种方式学习到很多课堂上没有的知识,还积累了一定的实践经验,增强了动手能力和解决实际问题的能力。
在此之前,对于Java编程技术或网络socket编程知识都只是略知皮毛,缺乏深入的认识,对其工作方式和原理缺乏透彻的认识。
在这段时间里,我认真学习了Java语言开发,Applet小程序实现,对编程思想有了进一步的体会,养成了一些良好的编程习惯。
程序虽然完成,但是距离优秀仍存在一定差距,用JAVA开发大型项目还有很多我需要去努力学习的知识。
希望自己能不断学习和实践,争取以后做得更好。
限于我的知识水平和经验有限,此程序还有许多有待完善和改正的地方,恳请老师批评指正。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 聊天室 程序设计 实验 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)