Java网络聊天室课程设计Word格式文档下载.docx
- 文档编号:18853433
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:19
- 大小:301.99KB
Java网络聊天室课程设计Word格式文档下载.docx
《Java网络聊天室课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Java网络聊天室课程设计Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
目录
一课程设计的目的……………………………………………1
二需求分析………………………………………………….2
三系统设计………………………………………………….3
四详细设计………………………………………………….5
五总结……………………………………………………….9
六参考文献.………………………………………………..10
七附录(源代码)…………………………………………..11
一、课程设计的目的
通过此项目实训——JAVA聊天室的设计,实践、总结、回顾了网络编程思想以及编程方法,并通过编写程序来掌握Java语言编程技巧,将学习到的知识融会贯通,同时提高调试程序的能力,养成良好的编程习惯,并增强对程序设计整体思路的把握,理论与时间相结合。
本文的主要工作集中在:
该课程基于C/S模式,客户机向服务器发聊天请求,服务器应答并能显示客户机发过来的信息。
当用户聊天时,将当前用户名、聊天对象、聊天,内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端。
当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对象,接收用户的聊天信息是由多线程技术实现的,因为客户端必须时时关注更新服务器上是否有最新消息,当每次用户接收到聊天信息后将会开始分析聊天信息然后将适合自己的信息人性化地显示在聊天信息界面上。
进一步培养学生面向对象程序设计的思想,加深对面向对象程序设计四大特性的理解,针对JAVA语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。
二、需求分析
随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:
信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。
因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。
因此出现了QQ等聊天工具,然而QQ等聊天工具虽然方便、实用,但是,娱乐功能太多,有很多吸引人的娱乐功能,从一定程度上来说,是一种娱乐工具,不能作为用于即时通讯、文件共享的专用工具。
目前,用于实现单一的即时通讯、文件共享的软件实在太少,而且,它们中大部分都是绝对的C/S模式,对远程服务器有非常大的依赖性,没有彻底实现点对点的交流。
为此,我们决定开发一个专用于实现两台计算机之间即时通讯、文件共享的软件,以方便两台计算机之间信息的交流。
本软件属于点对点连接的,在连接并通信时,尤其是近程的即时通讯,彻底的脱离了远程的服务器,避免了和远程服务器连接时过多的浪费网络资源。
并且避免了服务器忙或与服务器无法连接时,浪费过多时间用于和服务器建立连接!
因此,这个软件是极具适应性和实用性的即时通讯软件.
三、系统设计
系统可以采用任何一种流行的,Java支持的数据库,本系统采用了Microsoft公司的Access作为后台数据库。
通过对现在流行的一些Icq的参考,建立数据库,名为chart,数据库共建立一个表,表中基本信息包括编号,uername,password。
(1)用户的基本信息表(表名userlilst)
序号字段名含义数据类型NULL
1编号用户的编号int
2username用户名文本
3password用户的密码文本
其中编号字段为自动增加。
◆服务器端程序如下:
服务器与客户间通过套接口Socket(TCP)连接。
在java中使用套接口相当简单,JavaAPI为处理套接口的通信提供了一个类.Socket.,使得编写网络应用程序相对容易.服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8888,然后无限循环调用accept()方法接受客户程序的连接。
◆客户端程序如下:
客户通过Socket(InetAddress,port)建立与服务器的连接。
服务器与客户都通过构造BufferedReader,PrintWriter来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。
客户端然后向服务器发送消息,比如登录,服务器收到来自客户的请求后,针对不同的消息处理请求,虽然UDP不可靠但是对于icq可靠性并不太重要,而且UDP快速,所以客户间发送信息通过UDP。
用户登录时通过类DatagramPacket和DatagramSocket创建UDP包括其本地接受端口以及发送端口。
四、详细设计
图1.1:
服务器端页面
图1.2:
程序运行界面
图1.3:
注册页面
图1.4:
登陆页面
图1.5:
网友1页面
图1.6:
网友2页面
图1.7:
网络涂鸦板颜色面板
图1.8:
聊天记录面板
图1.9:
数据库页面
1.服务器端:
(Windows平台)首先应有java环境jdk,建议采用jdk1.5。
然后安装Access数据库,建立数据库chart,并且建立表userlist。
然后在控制面板中的ODBC数据源中设置用户DSN数据源TrioMotors建立与数据库的连接。
然后运行程序即可。
2.客户端:
只要有有java环境jdk就可以建议jdk1.5。
然后运行程序及可。
五、总结
两周的课程设计结束了,我的收获很大。
通过课程设计的编程和对编程过程中遇到的问题的思考,有效的提高了我对数据结构的认识和理解,切实的提高了我的编程能力,补全了我的不足。
通过这次课程设计,我巩固所了学过的知识,能用JAVA熟练地运用其中的一些,进一步掌握了各个指令的功能是转向。
课程设计是对我们所学的这些东西一个综合的运用。
在整个程序的编写中,调试占了很大部分的时间。
要想写好程序,必须认真对待代码的每一个细节,还必须熟练的掌握各种命令,这对程序的调试是非常重要的。
通过这次实际动手能力的培养,我进一步熟悉了使用方法,基本达到了能独立阅读、编制和调试一定规模的水平。
课程设计是对自己所学知识掌握程度最好的检验,特别是对于一些细节问题。
考试还并不能完全的说明什么,因为考题都是一些单个的问题,大多只是知识的某一方面。
而课程设计不同,我们要用到很多的单个知识点,把他们综合起来运用到自己的课题当中。
学了一个学期的数据结构,现在终于迎来了课程设计,当然是一个很好的锻炼自己的机会。
在本次的课程设计也发现了自己很多的缺点不足之处,对于一些细节性的问题老犯错,特别是一个标点的错误,很急人。
对于有些知识掌握的不行,有的是模模糊糊的不牢靠,虽然有的东西考试考过,但当它用到实际问题的时候,往往不知道用哪,放哪。
实践出真知。
课程设计是个实践,虽然实际不长,但给我们对知识的运用,利用都有了很好的发挥。
人多力量大这句话是真理啊,不懂得地方问同学,不会的地方也问同学,自己努力的同时跟别人共同进步,这就是合作,学会合作是我们以后必备的重要的一项人际技能。
一个程序的完成需要不断地修改才能够得到完善,人生正如那程序一样,只有不断地努力、奋斗、勇往直前,才能够完善自己,做最好的自己。
最后感谢同学的帮助,感谢老师的指导!
六、参考文献
1.Java2实用教程(第三版)编著者耿祥义张跃平清华大学出版社2006
2.Java编程设计编著者刘海杰中国铁道出版社2006
3.Java网络编程精解编著者孙卫琴电子工业出版社
七、附录
服务器端代码:
publicstaticintport=8888;
ServerSocketserver;
Socketclient=null;
BufferedReadercin=null;
PrintWritercout=null;
ThreadchartThread=null;
JButtonrunButton=newJButton("
运行"
);
JButtonstopButton=newJButton("
停止"
JButtonexitButton=newJButton("
退出"
JButtonmessageButton=newJButton("
发送消息"
JTextFieldserMessage=newJTextField("
"
25);
JPanelp1=newJPanel();
JPanelp2=newJPanel();
JScrollPanemessageScrollPane;
JTextAreamessage=newJTextArea();
booleanisRunning=false;
publicServer(){
super("
网络聊天服务器"
p1.add(runButton);
p1.add(stopButton);
p1.add(exitButton);
runButton.addActionListener(this);
stopButton.addActionListener(this);
exitButton.addActionListener(this);
messageButton.addActionListener(this);
p2.add(serMessage);
p2.add(messageButton);
messageScrollPane=newJScrollPane(message,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
this.getContentPane().add(p1,"
North"
this.getContentPane().add(p2,"
South"
this.getContentPane().add(messageScrollPane,"
Center"
this.setSize(400,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
publicvoidactionPerformed(ActionEvente)
{if(e.getSource()==runButton){
chartThread=newThread(this);
chartThread.start();
runButton.setVisible(false);
message.append("
服务器启动"
+"
\n"
}elseif(e.getSource()==stopButton)
{
chartThread=null;
runButton.setVisible(true);
if(cout!
=null)cout.println("
stop"
try{
if(server!
=null)
server.close();
}catch(Exceptionexp){}
服务器停止"
}elseif(e.getSource()==exitButton)
exit"
System.exit(0);
}elseif(e.getSource()==messageButton)
if(chartThread!
=null)
{
sendMessage(serMessage.getText());
message.append("
发送:
+serMessage.getText()+"
}
}
}
publicvoidrun()
{
server=newServerSocket(port);
while(chartThread!
client=server.accept();
cin=newBufferedReader(newInputStreamReader(client.getInputStream()));
cout=newPrintWriter(client.getOutputStream(),true);
Stringusername;
Stringpassword;
username=cin.readLine();
password=cin.readLine();
if(userOK(username,password))
message.append("
客户:
+username+"
进入\n"
cout.println("
ok"
Stringaline;
while((aline=cin.readLine())!
=null&
&
chartThread!
if(aline.equals("
))
客户:
已退出!
break;
}elsemessage.append(username+"
说:
+aline+"
}elsecout.println("
error"
cin.close();
cout.close();
client.close();
server.close();
catch(Exceptione)
System.out.println(e);
publicbooleanuserOK(Stringusername,Stringpassword)
booleanok=false;
try{
//①加载驱动程序
Class.forName("
sun.jdbc.odbc.JdbcOdbcDriver"
catch(ClassNotFoundExceptione){
//驱动程序加载不成功,打印错误信息并退出
System.out.println("
Cannotfinddriver"
);
System.exit(-1);
Connectioncon;
try{
//②获得jdbc连接
con=DriverManager.getConnection("
jdbc:
odbc:
TrioMotors"
"
user"
//③创建Statement对象
Statementstmt=con.createStatement();
//④得到查询结果集
Stringsql="
select*fromuserlistwhereusername='
+username+"
'
;
ResultSetrs=stmt.executeQuery(sql);
//列印结果集
while(rs.next())
Stringps=rs.getString("
password"
if(ps.equals(password)){
//验证通过
ok=true;
}
//⑤关闭数据库连接
rs.close();
stmt.close();
con.close();
catch(SQLExceptionsqe){
sqe.printStackTrace();
returnok;
publicvoidsendMessage(Stringmessage)
cout.println(message);
publicstaticvoidmain(Stringargs[])
Servermy=newServer();
客户端代码:
publicclassClientextendsJFrameimplementsActionListener,Runnable
{
publicstaticintport=8888;
Socketclient;
BufferedReadercin;
PrintWritercout;
privateJLabeluserlabel=newJLabel("
用户名"
privateJLabelpasswordlabel=newJLabel("
密码"
privateJTextFieldusername=newJTextField(10);
privateJPasswordFieldpassword=newJPasswordField(10);
privateJButtonloginButton=newJButton("
登录"
privateJButtonexitButton=newJButton("
privateJPanelp1=newJPanel();
JButtonmessageButton=newJButton("
JTextFieldclientMessage=newJTextField("
Threadchart=null;
publicClient()
网络聊天客户端"
p1.add(userlabel);
p1.add(username);
p1.add(passwordlabel);
p1.add(password);
p1.add(loginButton);
loginButton.addActionListener(this);
p2.add(clientMessage);
this.setSize(500,300);
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==loginButton){
Stringpword=newString(password.getPassword());
if(loginServer(username.getText(),pword))
chart=newThread(this);
chart.start();
}else{
JOptionPane.showMessageDialog(null,"
usernameorpassworderror!
cout.println("
chart=null;
if(e.getSource()==messageButton)
sendMessage(clientMessage.getText());
+clientMessage.getText()+"
publicbooleanloginServer(Stringusername,Stringpassword)
client=newSocket("
localhost"
8888);
cin=newBufferedReader(newInputS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 网络 聊天室 课程设计