Java聊天室课程设计报告.docx
《Java聊天室课程设计报告.docx》由会员分享,可在线阅读,更多相关《Java聊天室课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
![Java聊天室课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-4/21/dbad5e89-8460-4c85-8f73-6a583e6e3d28/dbad5e89-8460-4c85-8f73-6a583e6e3d281.gif)
Java聊天室课程设计报告
甘肃政法学院计算机科学学院
Java程序设计课程设计
题 目网络聊天程序开发设计与实现
计算机科学学院信息管理与信息系统专业10级信管班
学号:
201081020108 201081020112
姓 名:
贾燚 李思敏
指导教师:
李 瑞 生
成 绩:
____________
完成时间:
2011年12月
1.摘要 2
2.绪论 0
2.开发环境 0
3.需求分析 1
3.1程序简介 1
3.2程序功能 1
4.系统设计 2
4.1概要设计 2
4.2详细设计 2
5.测试 8
6.结论 11
参考文献 12
摘要
本次训练主要是考查了对JAVA程序设计的综合运用,设计一个Socket通信的聊天程序,用户可以通过程序进行聊天通信,但不支持用户自定义表情及图片的发送。
本程序设计也用到了一些相关的标准Java的类,给程序设计带来了许多的方便,但用那些要切记加相应的类的包,还有一些构造方法和个别接口方法。
本程序可以实现用户之间的一些简单的交互,虽然功能较少,但是我想通过这次程序设计来熟悉并且学习更多关于JAVA编程的东西,来便于以后可以使用。
关键词:
java聊天
1.绪论
对于一个选择网络编程的人来说,必须要有足够的细心和耐心,因为编程一般来说是很枯燥的乏味的,而且程序会越来越复杂,它所用到的符号、标记很多,所以不能出点小错误的。
还有,我们不能只是看程序,要学会把自己学的自己拿去实践,自己去编一些程序,培养自己的动手能力,掌握一些编程技巧,熟练运用自己学到的理论知识,这样在以后才能开发出属于自己的东西。
如今,随着科学技术的发展,计算机已成为了我们生活中必不可少的设备了,而掌握计算机知识和运用,又成了我们每一个人的目标了。
现在IT行业的飞速发展,无不应正了以前、现在、将来计算机行业都是科学发展的主导行业。
而这些基本上都建立在程序上的,所以程序员对计算机行业来说,可想而知有多么的重要了,他们所付出的每一滴汗水都将推动这个行业的发展。
现在我就用JAVA语言编写一个简单的程序——Java聊天程序。
将所学的基本知识用到其中去,这里包括了构造方法,创建图形界面,引用类等等。
这不仅能锻炼我的实践能力,同时也进一步复习和巩固了我所学的理论知识。
对以前没有学好的还有督促和促进作用。
而且,根据需要,还可以了解一些课外的知识。
增加自己的知识面。
2.开发环境
在开发此聊天程序时,该项目所使用的软件开发环境如下:
操作系统:
WindowsXP
开发工具:
eclipse3.2及其VE插件
Eclipse简介
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具。
Eclipse是著名的跨平台的自由集成开发环境(IDE)。
最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。
Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。
许多软件开发商以Eclipse为框架开发自己的IDE。
Eclipse最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。
IBM提供了最初的Eclipse代码基础,包括Platform、JDT和PDE。
目前由IBM牵头,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、RationalSoftware、RedHat及Sybase等。
Eclipse是一个开发源码项目,它其实是VisualAgeforJava的替代品,其界面跟先前的VisualAgeforJava差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。
近期还有包括Oracle在内的许多大公司也纷纷加入了该项目,并宣称Eclipse将来能成为可进行任何语言开发的IDE集大成者,使用者只需下载各种语言的插件即可。
3.需求分析
3.1程序简介
随着网络技术的发展,人们越来越多的依赖于网络,为了方便人们的生活,网络聊天自然成为了热点,各种工具到处都是。
此程序便是模仿其他聊天工具设计的,当然只是实现了比较少的功能,可以进行基本的聊天。
3.2程序功能
该程序功能:
该程序分为2个部分,一个是客户端程序,一个是服务端程序,需要先开启服务器,再开启客户端才能使用,客户端程序提供了相互通信、清空聊天记录的等功能,服务端则用于接受客户端的请求,记录客户端的信息等。
4.系统设计
4.1概要设计
此聊天程序共有2个部分,客户端和服务器。
客户端中包含了3个Java文件,分别为主类Chat.java,登陆窗口类LoginFrame.java,聊天窗口类ChatFrame.java;服务器端只有一个主类Server.java。
程序流程图:
服务器程序结构 客户端程序结构
4.2详细设计
(1)服务器程序实现
本程序采用的是Socket通信来设计的,建立一个主类Server.java,其中主类中还包括服务器线程类CreateServerThread.java然后在其构造方法加载程序所需的组件,构造方法如下:
publicclassServerextendsServerSocket
{
staticfinalintSERVER_PORT=10000;//定义端口
Vectorvector1=newVector();
Vectorvector2=newVector();
publicServer()throwsIOException
{
super(SERVER_PORT);
try
{
while(true)
{
System.out.println("等待客户连接......");
Socketsocket=accept();
newCreateServerThread(socket,vector1,vector2);
}
}
catch(IOExceptione){System.out.println("客户连接错误");}
finally
{
close();
}
}
publicstaticvoidmain(String[]args)throwsIOException
{
newServer();
}
}
其运行截图如下图所示:
(2)、客户端主程序
本程序使用了默认的卡片布局方式,对窗口的大小进行设置,让聊天窗口能够居中显示,以及调用注册类和登录主窗口类。
实现窗口布局功能和类的调用功能的主要代码如下:
publicclassChat
{
booleanpackFrame=false;
Chat()
{
chatFrameframe=newchatFrame();
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
DimensionframeSize=frame.getSize();
if(frameSize.height>screenSize.height){
frameSize.height=screenSize.height;
}
if(frameSize.width>screenSize.width){
frameSize.width=screenSize.width;
}
frame.setLocation((screenSize.width-frameSize.width)/2,
(screenSize.height-frameSize.height)/2);
}
publicstaticvoidmain(String[]args)
{
SwingUtilities.invokeLater(newRunnable()
{
publicvoidrun()
{ newChat(); }
});
}
}
(3)、登录界面的设计
程序提供了注册窗口,用户可以对用户名和性别进行填写,同时,可以接受几个用户的注册,但用户名不能相同。
实现注册功能的主要代码如下:
publicclassLoginFrameextendsJFrameimplementsActionListener
{
JPanelcontentPane;
JLabeljLabel1=newJLabel();
JTextFieldjTextField1=newJTextField();
ButtonGroupbuttonGroup1=newButtonGroup();
JRadioButtonjRadioButton1=newJRadioButton("男");
JRadioButtonjRadioButton2=newJRadioButton("女");
JLabeljLabel2=newJLabel("性别:
");
JButtonjButton1=newJButton();
JButtonjButton2=newJButton();
Stringsex="男";
Stringname=null;
booleanbool=false;
Socketsocket;
DataInputStreamin;
DataOutputStreamout;
publicLoginFrame()
{
setSize(newDimension(400,210));
setTitle("登录界面");
setVisible(true);
contentPane=(JPanel)getContentPane();
contentPane.setLayout(null);
this.setResizable(false);
jLabel1.setFont(newFont("Dialog",15,15));
jLabel1.setText("请输入您的昵称:
");
jLabel1.setBounds(53,20,113,44);
jTextField1.setBounds(182,25,154,33);//输入客户昵称
jRadioButton1.setFont(newFont("Dialog",Font.PLAIN,13));
jRadioButton1.setSelected(true);//输入客户性别
jRadioButton1.setBounds(186,64,91,25);
jRadioButton1.addActionListener(this);
jRadioButton2.setFont(newFont("Dialog",Font.PLAIN,13));
jRadioButton2.setBounds(187,90,91,25);
jRadioButton2.addActionListener(this);
jLabel2.setFont(newFont("Dialog",Font.PLAIN,15));
jLabel2.setBounds(136,80,34,16);
jButton1.setBounds(182,138,71,25);//"确定"与"取消"按钮
jButton1.setText("确定");
jButton1.addActionListener(this);
jButton2.setBounds(264,138,71,25);
jButton2.setText("取消");
jButton2.addActionListener(this);
contentPane.add(jLabel1);
contentPane.add(jTextField1);
contentPane.add(jRadioButton1);
contentPane.add(jRadioButton2);
contentPane.add(jLabel2);
contentPane.add(jButton2);
contentPane.add(jButton1);
buttonGroup1.add(jRadioButton1);
buttonGroup1.add(jRadioButton2);
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
DimensionframeSize=getSize();
if(frameSize.height>screenSize.height)
{frameSize.height=screenSize.height;}
if(frameSize.width>screenSize.width)
{ frameSize.width=screenSize.width;}
setLocation((screenSize.width-frameSize.width)/2,
(screenSize.height-frameSize.height)/2);
setVisible(true);
}
其运行截图如下图所示:
(5)、聊天窗口程序设计
程序提供了发送文字和清空聊天记录的的简单功能。
以下是实现程序的主要方法:
publicchatFrame()
{
setTitle("JY聊天室");
setSize(602,515);
this.setResizable(false);
this.setVisible(false);
try{
setDefaultCloseOperation(EXIT_ON_CLOSE);
addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{
try{
out.writeUTF("下线了:
"+frame.name+"/"+frame.sex);
out.close();
in.close();
socket.close();
}
catch(Exceptionee){ }
finally
{
frame.dispose();
dispose();
}
}
}
);
jbInit();
}catch(Exceptionexception)
{exception.printStackTrace();}
}
voidjbInit()throwsException
{
jScrollPane1.setBounds(2,2,445,320);
jScrollPane2.setBounds(1,333,448,95);
jScrollPane3.setBounds(458,6,139,424);
jBtnSend.setBounds(93,441,78,31);
jBtnClear.setBounds(185,441,76,31);
frame.setVisible(true);
jTextArea1.setEditable(false);
contentPane=(JPanel)getContentPane();
contentPane.setLayout(null);
contentPane.add(jScrollPane2);
contentPane.add(jScrollPane1,null);
contentPane.add(jScrollPane3);
contentPane.add(jBtnSend);
contentPane.add(jBtnClear);
contentPane.add(jBtnBiaoQing);
jScrollPane1.getViewport().add(jTextArea1);
jScrollPane2.getViewport().add(jTextArea2);
jScrollPane3.getViewport().add(jList1);
jBtnClear.addActionListener(this);
jBtnSend.addActionListener(this);
try{
InetAddressaddress=InetAddress.getLocalHost();
socket=newSocket(address.getHostAddress(),port);
//socket=newSocket("127.0.0.1",port);
in=newDataInputStream(socket.getInputStream());
out=newDataOutputStream(socket.getOutputStream());
}catch(Exceptione){
setVisible(true);
jTextArea2.setText("无法与服务器联接,请退出...");
}
if(thread==null)
{
thread=newThread(this);
thread.start();
}
frame.setClection(socket,in,out);
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==jBtnSend)
{sendStr();}
if(e.getSource()==jBtnClear)
{jTextArea1.setText(""); }
}
其运行截图如下图所示:
5.测试
程序在编码过程中,出现了许多的问题,有的是因为程序的完善性不够好而造成的,有的是因为技术不够而无法解决。
通过不停的调试,修改,多数已发现的问题都已完善,但依然存在少数的问题无法解决。
例如,在用户注册这个功能中,当用户的用户名重复时,服务器会出现用户名重复的异常,服务器就不会响应。
6.结论
通过这次程序的实训,我知道了自己在许多地方的不足,虽然书上的程序基本能看懂,但是自己的编程实践能力实在是欠缺,而且我知道了,Java语言最重要的不仅仅是学好语法,而Java中最重要的还是要理解它的面向对象编程的思想,理解它的面向对象的特征。
因为学习任何一门语言最重要的就是理解它的思想,要做到知其然,并且知其所以然。
要学会真正的编写程序,而不仅仅是把语法背的滚瓜烂熟。
还要经常写代码,做到一边写一边理解,这样才能真正的实现学习Java语言的目的。
这次实训也告诉了我,光有书上的知识对我们来说是远远不够的,如果我们要想让自己在编程上有所突破的话,我们必须拓展自己的知识面,此次程序设计就给我增加了不少的知识,让我在编程方面学到了许多编程所需要的东西,还有也锻炼我的耐性,磨砺了我的意志,在错误面前反复修改但是从不气馁。
所以,这次实训让我受益匪浅,不管是在知识方面还是做事方面,都交会了我许多。
同时还巩固了以前所学的知识,学到了不少书本上没有的知识;学到了很多java编程知识,并学会了简单的使用Eclipse来开发Java程序的一些使用技巧这次课程设计是对我本学期所学的知识的检验,由此我发现了不少的问题。
可以说它给了我一次自我评估的机会。
通过设计让我知道了那些方面我还是有欠缺的,促使我花时间弥补。
临近考试,时间太紧迫,致使程序实现的功能在方法上也许不是很完美,但我以后会多向老师请教,自己也要加强对Java的学习。
努力进一步提高自己的编程水平。
参考文献
[1]耿祥义.Java课程设计:
清华大学出版社第二版,2008年11月.
[2]马皓.Java语言程序设计:
机械工业出版社,2007年3月
[3]孙卫琴.java面向对象编程.电子工业出版社.2007
[4]刘海军.Java程序设计.中国铁道出版社,2006
[5]郑阿奇,姜乃松,殷红先.Java实用教程.电子工业出版社,2005
[6]张广彬、王小宁、高静,Java课程设计案例精编(第二版)清华大学出版社,2011年