Java网络聊天室课程设计打印.doc_第1页
Java网络聊天室课程设计打印.doc_第2页
Java网络聊天室课程设计打印.doc_第3页
Java网络聊天室课程设计打印.doc_第4页
Java网络聊天室课程设计打印.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计任务书题 目: JAVA 聊天室课程设计 学 号 2 姓 名 专 业 计算机科学与技术 课 程 java 网络编程精解 指导教师 职 称 完成时间:2010年6月2010年7月 计算机科学系制说 明一、课程设计写作框架(仅供参考)摘要目录正文1、 基本设计任务及要求、所用仪器设备;2、 总体设计方案及主要设计原理;3、 实现技术及源程序代码;4、 测试及分析;5、 结束语(心得体会、改进方向)。参考文献二、写作要求:课程设计写作要求论点明确、论据充分、说明透彻,语言准确恰当,书面整洁,字迹工整。课程设计的篇幅本科一般为4000字左右,专科一般为3000字左右。课程设计任务书及成绩评定课程设计的任务和具体要求该项目实训的目的主要是对所学网络知识进行梳理、巩固和提高。通过项目实训熟悉系统开发的基本流程,掌握系统开发的各个环节的要点,培养系统分析和设计的能力,锻炼团队合作精神。具体要求:课程设计任务下达后,研究系统的功能、性能和界面要求,具体安排如下: 1、下达项目实训任务,进行需求分析,形成需求分析报告。 2、进行总体设计和详细设计,形成详细设计报告,进行系统模块开发。 3、全部上机进行系统模块开发和模块测试。 4、系统集成和集成测试,撰写系统操作说明书和项目实训总结报告。指导教师签字:日 期:指导教师评语成 绩: 指导教师签字: 日 期:课程设计所需软件、硬件等软件:Windows 2000以上的操作系统、JDK开发包、eclipse开发环境硬件:机房台式计算机课 程 设 计 进 度 计 划起 至 日 期工 作 内 容备 注2010.5.282010.6.5 2010.6.62010.6.18需求分析及初步设计阶段,根据相应功能设计出各类所用到的方法及数据类型对各个界面和服务器进行调整及测试完善工作。参 考 文 献、资 料 索 引序 号文献、资料名称编 著 者出 版 单 位1.Java2实用教程(第三版 ) 编著者 耿祥义 张跃平 清华大学出版社 20062.Java编程设计 编著者 刘海杰 中国铁道出版社 20063.Java网络编程精解 编著者 孙卫琴 电子工业出版社 摘 要通过此项目实训JAVA聊天室的设计,实践、总结、回顾了网络编程思想以及编程方法,并通过编写程序来掌握Java语言编程技巧,将学习到的知识融会贯通,同时提高调试程序的能力,养成良好的编程习惯,并增强对程序设计整体思路的把握,理论与时间相结合。本文的主要工作集中在:该课程基于C/S模式,客户机向服务器发聊天请求,服务器应答并能显示客户机发过来的信息。当用户聊天时,将当前用户名、聊天对象、聊天,内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端。当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对象,接收用户的聊天信息是由多线程技术实现的,因为客户端必须时时关注更新服务器上是否有最新消息,当每次用户接收到聊天信息后将会开始分析聊天信息然后将适合自己的信息人性化地显示在聊天信息界面上。关键字:java;QQ聊天室,eclipseJAVA 聊天室课程设计前言:随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。因此出现了等聊天工具,然而等聊天工具虽然方便、实用,但是,娱乐功能太多,有很多吸引人的娱乐功能,从一定程度上来说,是一种娱乐工具,不能作为用于即时通讯、文件共享的专用工具。目前,用于实现单一的即时通讯、文件共享的软件实在太少,而且,它们中大部分都是绝对的C/S模式,对远程服务器有非常大的依赖性,没有彻底实现点对点的交流。为此,我们决定开发一个专用于实现两台计算机之间即时通讯、文件共享的软件,以方便两台计算机之间信息的交流。本软件属于点对点连接的,在连接并通信时,尤其是近程的即时通讯,彻底的脱离了远程的服务器,避免了和远程服务器连接时过多的浪费网络资源。并且避免了服务器忙或与服务器无法连接时,浪费过多时间用于和服务器建立连接!因此,这个软件是极具适应性和实用性的即时通讯软件.一、课程设计的目的进一步培养学生面向对象程序设计的思想,加深对面向对象程序设计四大特性的理解,针对JAVA语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。二、系统分析与设计系统可以采用任何一种流行的,Java支持的数据库,本系统采用了Microsoft公司的Access作为后台数据库。通过对现在流行的一些Icq的参考,建立数据库,名为chart,数据库共建立一个表,表中基本信息包括编号,uername,password。(1)用户的基本信息表(表名userlilst)序号字段名含义数据类型NULL1编号用户的编号int2username用户名文本3password用户的密码文本 其中编号字段为自动增加。 服务器端程序如下: 服务器与客户间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,Java API为处理套接口的通信提供了一个类.Socket.,使得编写网络应用程序相对容易服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8888,然后无限循环调用accept()方法接受客户程序的连接。主要代码如下:public static int port=8888; ServerSocket server; Socket client=null; BufferedReader cin=null; PrintWriter cout=null; Thread chartThread=null; JButton runButton=new JButton(运行); JButton stopButton=new JButton(停止); JButton exitButton=new JButton(退出); JButton messageButton=new JButton(发送消息); JTextField serMessage=new JTextField(,25); JPanel p1=new JPanel(); JPanel p2=new JPanel(); JScrollPane messageScrollPane; JTextArea message=new JTextArea(); boolean isRunning=false; public Server()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=new JScrollPane(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); public void actionPerformed(ActionEvent e)if(e.getSource()=runButton)chartThread=new Thread(this);chartThread.start();runButton.setVisible(false);message.append(服务器启动+n); else if (e.getSource()=stopButton)chartThread=null;runButton.setVisible(true);if(cout!=null) cout.println(stop);tryif(server!=null) server.close();catch(Exception exp)message.append(服务器停止+n);else if(e.getSource()=exitButton)chartThread=null;if(cout!=null) cout.println(exit);System.exit(0);else if (e.getSource()=messageButton)if(chartThread!=null)sendMessage(serMessage.getText();message.append(发送:+serMessage.getText()+n);public void run()try server=new ServerSocket(port); while(chartThread!=null) client=server.accept() ; cin=new BufferedReader(new InputStreamReader(client.getInputStream(); cout=new PrintWriter(client.getOutputStream(),true); String username; String password; username=cin.readLine(); password=cin.readLine(); if(userOK(username,password) message.append(客户:+username+进入n); cout.println(ok); String aline; while(aline=cin.readLine() )!=null&chartThread!=null) if(aline.equals(exit) message.append(客户:+username+已退出!n); break; else message.append(username+说:+aline+n); else cout.println(error); cin.close() ; cout.close() ; client.close() ; server.close(); catch(Exception e) System.out.println(e); public boolean userOK(String username,String password)boolean ok=false;try /加载驱动程序 Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException e) /驱动程序加载不成功,打印错误信息并退出 System.out.println(Can not find driver ); System.exit( -1); Connection con; try /获得jdbc 连接 con = DriverManager.getConnection(jdbc:odbc:TrioMotors, user, ); /创建Statement对象 Statement stmt = con.createStatement(); /得到查询结果集 String sql = select * from userlist where username= + username + ; ResultSet rs = stmt.executeQuery(sql); /列印结果集 while(rs.next()String ps = rs.getString(password);if (ps.equals(password) /验证通过ok=true; /关闭数据库连接 rs.close(); stmt.close(); con.close(); catch (SQLException sqe) sqe.printStackTrace(); return ok;public void sendMessage(String message)cout.println(message);public static void main(String args)Server my=new Server(); 客户端程序如下 :客户通过Socket(InetAddress,port)建立与服务器的连接。服务器与客户都通过构造BufferedReader,PrintWriter来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。客户端然后向服务器发送消息,比如登录,服务器收到来自客户的请求后,针对不同的消息处理请求, 虽然UDP不可靠但是对于icq可靠性并不太重要,而且UDP快速,所以客户间发送信息通过UDP。用户登录时通过类DatagramPacket和DatagramSocket创建UDP包括其本地接受端口以及发送端口。主要代码如下: public class Client extends JFrame implements ActionListener,Runnable public static int port=8888; ServerSocket server; Socket client; BufferedReader cin; PrintWriter cout;private JLabel userlabel=new JLabel(用户名);private JLabel passwordlabel=new JLabel(密码);private JTextField username=new JTextField(10);private JPasswordField password=new JPasswordField(10);private JButton loginButton=new JButton(登录);private JButton exitButton=new JButton(退出);private JPanel p1=new JPanel();JButton messageButton=new JButton(发送消息);JTextField clientMessage=new JTextField(,25);JPanel p2=new JPanel();JScrollPane messageScrollPane;JTextArea message=new JTextArea();Thread chart=null;public Client()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=new JScrollPane(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); public void actionPerformed(ActionEvent e)if(e.getSource()=loginButton)String pword=new String(password.getPassword();if(loginServer(username.getText(),pword)chart=new Thread(this);chart.start();elseJOptionPane.showMessageDialog(null,user name or password error!);else if(e.getSource()=exitButton)cout.println(exit);chart=null;if (e.getSource()=messageButton)sendMessage(clientMessage.getText();message.append(发送:+clientMessage.getText()+n); public boolean loginServer(String username,String password) try client=new Socket(localhost,8888);cin=new BufferedReader(new InputStreamReader(client.getInputStream(); cout=new PrintWriter(client.getOutputStream(),true); cout.println(username); cout.println(password); String readLine=cin.readLine(); if(readLine.equals(ok) message.append(连接到服务器!n); return true; catch(Exception e) return false; public void run()String aline; trywhile(chart!=null&(aline=cin.readLine() )!=null) if(aline.equals(exit)|aline.equals(stop) message.append(服务器已断开!重新登录!n); break; else message.append(服务器说:+aline+n); Thread.sleep(200); cin.close() ; cout.close() ; client.close() ; catch(Exception e)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论