Java网络聊天室课程设计打印.docx

上传人:b****7 文档编号:23377694 上传时间:2023-05-16 格式:DOCX 页数:21 大小:281.33KB
下载 相关 举报
Java网络聊天室课程设计打印.docx_第1页
第1页 / 共21页
Java网络聊天室课程设计打印.docx_第2页
第2页 / 共21页
Java网络聊天室课程设计打印.docx_第3页
第3页 / 共21页
Java网络聊天室课程设计打印.docx_第4页
第4页 / 共21页
Java网络聊天室课程设计打印.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

Java网络聊天室课程设计打印.docx

《Java网络聊天室课程设计打印.docx》由会员分享,可在线阅读,更多相关《Java网络聊天室课程设计打印.docx(21页珍藏版)》请在冰豆网上搜索。

Java网络聊天室课程设计打印.docx

Java网络聊天室课程设计打印

课程设计任务书

题目:

JAVA聊天室课程设计

 

学号2

姓名

专业计算机科学与技术

课程java网络编程精解

指导教师职称

完成时间:

2010年6月—2010年7月

 

计算机科学系制

说明

、课程设计写作框架(仅供参考)

摘 要

目 录

正 文

1、基本设计任务及要求、所用仪器设备;

2、总体设计方案及主要设计原理;

3、实现技术及源程序代码;

4、测试及分析;

5、结束语(心得体会、改进方向)。

参考文献

、写作要求:

课程设计写作要求论点明确、论据充分、说明透彻,语言准确恰当,书面整洁,字迹工整。

课程设计的篇幅本科一般为4000字左右,专科一般为3000字左右。

课程设计任务书及成绩评定

课程设计的任务和具体要求

该项目实训的目的主要是对所学网络知识进行梳理、巩固和提高。

通过项目实训熟悉系统开发的基本流程,掌握系统开发的各个环节的要点,培养系统分析和设计的能力,锻炼团队合作精神。

具体要求:

课程设计任务下达后,研究系统的功能、性能和界面要求,具体安排如下:

1、下达项目实训任务,进行需求分析,形成需求分析报告。

2、进行总体设计和详细设计,形成详细设计报告,进行系统模块开发。

3、全部上机进行系统模块开发和模块测试。

4、系统集成和集成测试,撰写系统操作说明书和项目实训总结报告。

指导教师签字:

       日期:

     

指导教师评语

 

成绩:

  指导教师签字:

     日期:

    

课程设计所需软件、硬件等

软件:

Windows2000以上的操作系统、JDK开发包、eclipse开发环境

硬件:

机房台式计算机

课程设计进度计划

起至日期

工作内容

备注

2010.5.28—2010.6.5

2010.6.6—2010.6.18

需求分析及初步设计阶段,根据相应功能设计出各类所用到的方法及数据类型

对各个界面和服务器进行调整及测试完善工作。

参考文献、资料索引

序号

文献、资料名称

编著者

出版单位

1.Java2实用教程(第三版)编著者耿祥义张跃平清华大学出版社2006

2.Java编程设计编著者刘海杰中国铁道出版社2006

3.Java网络编程精解编著者孙卫琴电子工业出版社

摘要

通过此项目实训——JAVA聊天室的设计,实践、总结、回顾了网络编程思想以及编程方法,并通过编写程序来掌握Java语言编程技巧,将学习到的知识融会贯通,同时提高调试程序的能力,养成良好的编程习惯,并增强对程序设计整体思路的把握,理论与时间相结合。

本文的主要工作集中在:

该课程基于C/S模式,客户机向服务器发聊天请求,服务器应答并能显示客户机发过来的信息。

当用户聊天时,将当前用户名、聊天对象、聊天,内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端。

当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对象,接收用户的聊天信息是由多线程技术实现的,因为客户端必须时时关注更新服务器上是否有最新消息,当每次用户接收到聊天信息后将会开始分析聊天信息然后将适合自己的信息人性化地显示在聊天信息界面上。

关键字:

java;QQ聊天室,eclipse

 

JAVA聊天室课程设计

前言:

随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:

信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。

因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。

因此出现了QQ等聊天工具,然而QQ等聊天工具虽然方便、实用,但是,娱乐功能太多,有很多吸引人的娱乐功能,从一定程度上来说,是一种娱乐工具,不能作为用于即时通讯、文件共享的专用工具。

目前,用于实现单一的即时通讯、文件共享的软件实在太少,而且,它们中大部分都是绝对的C/S模式,对远程服务器有非常大的依赖性,没有彻底实现点对点的交流。

为此,我们决定开发一个专用于实现两台计算机之间即时通讯、文件共享的软件,以方便两台计算机之间信息的交流。

本软件属于点对点连接的,在连接并通信时,尤其是近程的即时通讯,彻底的脱离了远程的服务器,避免了和远程服务器连接时过多的浪费网络资源。

并且避免了服务器忙或与服务器无法连接时,浪费过多时间用于和服务器建立连接!

因此,这个软件是极具适应性和实用性的即时通讯软件.

一、课程设计的目的

进一步培养学生面向对象程序设计的思想,加深对面向对象程序设计四大特性的理解,针对JAVA语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。

二、系统分析与设计

系统可以采用任何一种流行的,Java支持的数据库,本系统采用了Microsoft公司的Access作为后台数据库。

通过对现在流行的一些Icq的参考,建立数据库,名为chart,数据库共建立一个表,表中基本信息包括编号,uername,password。

(1)用户的基本信息表(表名userlilst)

序号字段名含义数据类型NULL

1编号用户的编号int

2username用户名文本

3password用户的密码文本

其中编号字段为自动增加。

◆服务器端程序如下:

服务器与客户间通过套接口Socket(TCP)连接。

在java中使用套接口相当简单,JavaAPI为处理套接口的通信提供了一个类.Socket.,使得编写网络应用程序相对容易.服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8888,然后无限循环调用accept()方法接受客户程序的连接。

主要代码如下:

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

message.append("服务器停止"+"\n");

}elseif(e.getSource()==exitButton)

{

chartThread=null;

if(cout!

=null)cout.println("exit");

System.exit(0);

}elseif(e.getSource()==messageButton)

{

if(chartThread!

=null)

{

sendMessage(serMessage.getText());

message.append("发送:

"+serMessage.getText()+"\n");

}

}

}

publicvoidrun()

{

try{

server=newServerSocket(port);

while(chartThread!

=null)

{

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!

=null)

{

if(aline.equals("exit"))

{

message.append("客户:

"+username+"已退出!

\n");

break;

}elsemessage.append(username+"说:

"+aline+"\n");

}

}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();

}

}

◆客户端程序如下:

客户通过Socket(InetAddress,port)建立与服务器的连接。

服务器与客户都通过构造BufferedReader,PrintWriter来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。

客户端然后向服务器发送消息,比如登录,服务器收到来自客户的请求后,针对不同的消息处理请求,虽然UDP不可靠但是对于icq可靠性并不太重要,而且UDP快速,所以客户间发送信息通过UDP。

用户登录时通过类DatagramPacket和DatagramSocket创建UDP包括其本地接受端口以及发送端口。

主要代码如下:

publicclassClientextendsJFrameimplementsActionListener,Runnable

{

publicstaticintport=8888;

ServerSocketserver;

Socketclient;

BufferedReadercin;

PrintWritercout;

privateJLabeluserlabel=newJLabel("用户名");;

privateJLabelpasswordlabel=newJLabel("密码");

privateJTextFieldusername=newJTextField(10);

privateJPasswordFieldpassword=newJPasswordField(10);

privateJButtonloginButton=newJButton("登录");

privateJButtonexitButton=newJButton("退出");

privateJPanelp1=newJPanel();

JButtonmessageButton=newJButton("发送消息");

JTextFieldclientMessage=newJTextField("",25);

JPanelp2=newJPanel();

JScrollPanemessageScrollPane;

JTextAreamessage=newJTextArea();

Threadchart=null;

publicClient()

{

super("网络聊天客户端");

p1.add(userlabel);

p1.add(username);

p1.add(passwordlabel);

p1.add(password);

p1.add(loginButton);

p1.add(exitButton);

loginButton.addActionListener(this);

exitButton.addActionListener(this);

this.getContentPane().add(p1,"North");

p2.add(clientMessage);

p2.add(messageButton);

messageButton.addActionListener(this);

messageScrollPane=newJScrollPane(message,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,

JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

this.getContentPane().add(p2,"South");

this.getContentPane().add(messageScrollPane,"Center");

this.setSize(500,300);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

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!

");

}

}elseif(e.getSource()==exitButton)

{

cout.println("exit");

chart=null;

}

if(e.getSource()==messageButton)

{

sendMessage(clientMessage.getText());

message.append("发送:

"+clientMessage.getText()+"\n");

}

}

publicbooleanloginServer(Stringusername,Stringpassword)

{

try{

client=newSocket("localhost",8888);

cin=newBufferedReader(newInputStreamReader(client.getInputStream()));

cout=newPrintWriter(client.getOutputStream(),true);

cout.println(username);

cout.println(password);

StringreadLine=cin.readLine();

if(readLine.equals("ok"))

{

message.append("连接到服务器!

\n");

returntrue;

}

}catch(Exceptione)

{

}

returnfalse;

}

publicvoidrun()

{

Stringaline;

try{

while(chart!

=null&&(aline=cin.readLine())!

=null)

{

if(aline.equals("exit")||aline.equals("stop"))

{

message.append("服务器已断开!

重新登录!

\n");

break;

}elsemessage.append("服务器说:

"+aline+"\n");

Thread.sleep(200);

}

cin.close();

cout.close();

client.close();

}

catch(Exceptione){}

}

publicvoidsendMessage(Stringmes)

{

cout.println(mes);

}

publicstaticvoidmain(Stringargs[])

{

Clientmy=newClient();

my.setVisible(true);}

三、界面设计图

图1.1:

服务器端页面

图1.2:

程序运行界面

图1.3:

注册页面

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1