一对一客户通知器Java课程设计报告.docx

上传人:李司机 文档编号:6803962 上传时间:2024-02-25 格式:DOCX 页数:23 大小:132.25KB
返回 下载 相关 举报
一对一客户通知器Java课程设计报告.docx_第1页
第1页 / 共23页
一对一客户通知器Java课程设计报告.docx_第2页
第2页 / 共23页
一对一客户通知器Java课程设计报告.docx_第3页
第3页 / 共23页
一对一客户通知器Java课程设计报告.docx_第4页
第4页 / 共23页
一对一客户通知器Java课程设计报告.docx_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《一对一客户通知器Java课程设计报告.docx》由会员分享,可在线阅读,更多相关《一对一客户通知器Java课程设计报告.docx(23页珍藏版)》请在三一办公上搜索。

1、面对对拿程本领计课程设计报告题目一对一客户通知器姓名:学号:专业:一计算机科学与技术一班级:计科指导教师:职称:讲师计算机与电子工程学院2009年6月课程设计评审表姓名学院计算机与电子工程学院学号专业班级计科题目一对一客户通知器评审意见评审成绩指导教师签名职称评审时间年月日1课程设计题目描述和基本设计要求1.1 题目描述1.2 基本设计要求2系统r分析与42111f42110匕T4212422*VI5221I*I52225VI*53系统,贝!IJl与使用说明.731/51!)732IJ9321Idl-iI104.1遇到的问题及解决办法10附录一对一客户通知器1课程设计题目描述和基本设计要求1.

2、1 题目描述本程序是基于对单个特殊用户(如VIP用户)进行实时通知的需求而产生的。要求实现在服务器端发送消息,并显示发送时的具体时间,由单个客户端接收。1.2 基本设计要求界面应尽量简洁,易于操作,功能一目了然。2系统需求分析与设计2.1 系统需求分析2.1.1 功能需求分析1、能进行由服务器端到客户端的实时消息的发送;2、只支持单一客户端一对一发送消息;3、由服务端先发送请求,客户端同意接收时开始发送;2.1.2 其他需求分析(1)性能要求使用性强,占用内存空间小,运行速度快。(2)设计约束开发工具:jdkl.5运行环境:Windows2000,WindowsXP(3)界面要求可视图形界面,

3、以JAVA的默认观感为UI,确保能在移植的情况下正常使用。2.2 系统设计2.2.1 总体设计在用户界面方面,尽量做到美观大方,简洁易用。无菜单栏,因为完成信息的发送不需要用户过多的设置,使操作更为简单。整个界面大约占到桌面的1/16,小巧精致。在服务器端包含“侦听”“发送”两个按钮,而在客户端只包含“连接”一个按钮。服务端与客户端都有可滚动的文本显示域,方便查看已发送的信息。在服务端有输入文本的区域。最重要的是客户端和服务端都有端口地址的输入域,只有保证这个域的内容相同才能成功进行连接。客户端有一个本地IP域。整个工作2.2.2 详细设计这个简易客户通知器由用户界面和网络两部分构成。(1)用

4、户界面包含有以下几个类的使用:JFramejava.awt.Frame的扩展版本,该版本添加了对JFC/Swing组件架构的支持。它是本程序中使用的框架,与Frame不同,它特属SWing的组件,拥有更强的功能特性。JPanel它是本程序的面板,其本身也是一个容器。与普通的容器不同的是,它具有显示绘图的功能。JTextFieIdJTextField具有建立字符串的方法,此字符串用作针对被激发的操作事件的命令字符串。它是本程序中使用的文本域,是一个固定文本域。JTextArea多行纯文本显示域。JLabel标签域,用于显示固定的不可更改的字符,具有提示用户的作用。JButton按钮,有触发事件的

5、功能。JScrollPane可设横向与纵向滚动功能的文本域,由它可以显示大量文本信息。Thread线程,可根据系统需要单独执行一项程序。CalendarDateFormat使用calendar来生成实现日期和时间格式化所需的时间字段值。子类应将此calendar初始化为适合于与此DateFOrmat关联的语言环境的口历。包含以下接口的实现:ActionListener用于监听事件的发生,用actionPerformed方法来实现事件的反应机制。网络在网络应用的实现方面,需要导入一个包,由于要借助流来实现,java.io包和java.util包也是需要的。Socket由于要实现网络通讯,套接字是

6、一个不错的选择。它想一条虚拟的光缆,将两台(或多台)主机连接起来。套接字是通讯双方的一种约定,用套接字中的相关函数来完成通信过程。区别不同应用程序进程间的通信过程,主要有三个参数。它们是:通信的目的IP地址、使用的传输层协议(TCP或UDP)、使用的端口号。SOCket原意是“插座”。通过将这3个参数结合起来,与一个“插座”SoCket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。套接字的工作图示如下:图1套接字3系统测试与使用说明3.1 系统测试执行服务端程序后,会出现如下界面:图2测试1其中端口号是预置的,为“4700”o可以清

7、楚地看到,窗体中共有三个标签“端口号”、“请输入信息”、“已发送信息”,三个文本域(其中有一个是带纵向滚动功能的),两个按钮“侦听”、“发送”。由于是DefaUltLOOkAndFeeKjaVa的默认观感),界面的放大、缩小按钮以及关闭按钮都已经自动生成,形状也己统一画好。当要完成发送信息的任务时,我们可以先在服务端这边点“侦听”按钮,等待客户端响应;当客户端点击“连接”按钮后,便会在客户端与服务端提示已连接成功,此时连接工作便完成了。以下是客户端的初始状态图示:图3测试2其中,主机名称和端口号的值是预置的。客户端只有一个按钮“连接”,它需要在服务端的“侦听”按钮被按下后被按下。连接成功后,会

8、出现以下界面:图4测试3此时,客户端与服务端的“连接”“侦听”按钮上的文字改为“连接成功”,同时在服务端的“已发送信息”文本框中显示信息“客户端已经连接到服务器”,客户端的“已收到信息”文本框中显示信息“收到:(16点59分49秒)已经成功连接”,表示在本机时间16点59分49秒成功建立连接。好的,接下来就可以给客户端发送信息了!例如,服务器端发送信息”今天8点到贤德11栋楼下会面”,先在服务器端“请输入信息”后输入信息,点发送,便会出现如下图所示的效果:jserver玄缀臻三绥乡徼./窈蕊因端口号4700连接成功请输入信息今天8点到贤德11栋楼下会面。已发送信息客户端已经连接到服务器发送点5

9、0分35秒)今天8点到贤德11栋楼下会面。client口”端口号4700主机名称127.0.0.1连接成功已收到信息收到:(20点49分35秒)已经成功连接。收到20点50分35秒)今天8点到贤德11栋楼下会面。图5测试4客户端成功接收到信息,成功。3.2 系统使用说明在客户端和服务器端同时运行的前提下,确保端口号一致。其实系统预置的端口号是一致的,用户不需要更改。客户端的主机名称要填好,系统预置是“127.0.0.1”,用户也不需要更改。服务器端点击“侦听”按钮,待客户端点击“连接”按钮后,等待到按钮文字变为“连接成功”时,表示已经成功连接。由服务器端在“请输入信息”栏中输入需要发送的信息,

10、然后点击“发送”按钮。若成功,在服务器端的“已发送信息”文本框和客户端的“已收到信息”文本框会显示发送的信息和当前主机的时间。3.2.1 系统中存在的问题由于时间有限,本系统还存在很多不足之处。比如,当服务器端按“侦听”按钮后,客户端无法获知服务器端是否按下“侦听”按钮。只有在两者知道通信时间时才能在正确的时间按下按钮。4课程设计总结4.1 遇到的问题及解决办法在此次课程设计过程中,经历了艰难的调试过程。因为方法是死的,类也有详实的记载,将类和发法组合到一篇代码中也不是件难事。但是在调试的过程中遇到了各种各样的问题,让我不得不一遍又一遍的修改代码。有时甚至完全颠覆当初的思路,改换其他的方法。后

11、来我通过思考,了解到,之所以会遇到这么大的困难,主要是对JAVA这门计算机语言的认识很不够,一些细节根本不知道。但是事己至此,必须要在规定的时间内赶出来,于是我不断参照不同程序编写者的方法,一个一个调试。可谓用汗水换来了集中他人智慧与我自己改良的最终程序。虽然和一开始的初衷不太一样,但是在我还想调试的时候,发现时间已经不够了,所以只好将这件“未完成”的作品呈上。对于我的初衷来说,它是不合格的;但是作为我这些天努力的回报,我觉得它还是一份令我满意的答卷。4.2 心得体会学习是一件极费脑力的活,必须以相当认真的态度去对待。通过这次的学习,我发现我还要学的东西有很多,不仅仅是一门计算机语言,更重要的

12、是对问题的态度以及如何解决它的一些技巧。比如在写一大版代码时,有时我自己都觉得十分凌乱,这时我就开始重新将这些代码分块,每一块都不大,但能够实现一个简单的功能。将创建的每一个类和变量取一个合适的名字,这样有利于自己理解。后来,我回过头来看自己写的代码,也不觉得凌乱了。附录/clientprogramimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.io.*;.*;importjava.util.*;publicclassClient2extendsJFrameimplementsActionListen

13、erContainercont=newContainer();JPanelContentPane;JLabeljLabel1=newJLabel();JLabeIjLabe12=newJLabel();JTextFieIdjTextFieIdl=newJTextFieldC127.0.0.);JTextFieIdjTextField2=newJTextField(4700);JButtonjButtonl=newJButton();JScrollPanejScrollPane1=newJSCrolIPane();创建一个带有滚动条的面板。JTextAreaJTextArea1=newJTeXt

14、Area();/创建一个多行纯文本区域。JLabeljLabe14=newJLabel();ServerSocketserver=null;服务器套接字的仓IJ建。Socketsocket=nulIjBufferedReaderinstr=null;PrintWriteros=null;客户端套接字的创建。/Constructtheframepublicstaticvoidmain(Stringargs)JFrame.setDefaultLookAndFeelDecorated(true);Client2frm=newClient2();frm.setDefaultCloseOperation

15、(JFrame.EXIT_ON_CLOSE);frm.setVisible(true);)publicClient2()(ContentPane=(JPaneI)this.getContentPane();contentPane.setLayout(null);this.setBounds(newRectangle(256,232,532,233);this.setTitle(,client);jLabell.setFont(newjava.awt.Font(“宋体”,O,14);jLabel1.setText(主机名称”);jLabel1.setBounds(newRectangle(200

16、,27,72,28);jLabe12.setBounds(newRectangle(23,27,72,28);jLabel2setText(“端口号”);jLabel2.setFont(newjava.awt.Font(“宋体”,O,14);JTextFieId1.setBounds(newRectangle(276,27,72,24);jTextField2.setBounds(newRectangle(l13,27,72,24);jButton1.setBounds(newRectangle(440,28,73,25);jButton1.setFont(newjava.awt.Font(D

17、ialog,O,14);jButton!.SetBorder(BorderFactoryxreateEtchedBorderO);jButtonl.setText(连接)jButton1.SetActionCommandCjButton);jScro11Panel.setBounds(newRectangle(l13,92,312,89);jLabe14.setBounds(newRectangle(23,87,87,28);jLabel4.setText(已收到信息”);jLabe14.setFont(newjava.awt.Font(“宋体,04);contentPane.add(jLab

18、el1,null);contentPane.add(jTextFieldl,null);contentPane.add(jTextFieId2,null);contentPane.add(jButton1,null);contentPane.add(jScrolPanel,null);contentPane.add(jLabe!2,null);contentPane.add(jLabel4,nu11);jScrollPanel.getViewport().add(jTextAreal,null);jButton1.addActionListener(this);this.addWindowLi

19、stener(newWindowAdapter()(publicvoidwindowClosing(WindowEvente)socket.close();instr.close();System.exit(O);catch(Exceptionex);classMyThreadextendsThread与服务器不同。publicvoidrun()try(os=newPrintWriter(socket.getOutputStream();instr=newBufferedReader(newInputStreamReader(socket.getInputStream();while(true

20、)this.sleep(100);if(instr.ready()jTextAreaLaPPend(收到:(+getTime()+)”+instr.readLine()+n);)if(e.getSource()=jButton1)(Stringip=jTextFieldl.getText().trim();intport=Integer.parseInt(jTextField2.getText().trim();connectServer(ip,port);)privatevoidconnectServer(Stringip,intPort)连接这里也与服务器不同。try(if(jButton

21、l.getText().trim().equals(连接)socket=newSocket(ip,port);jButtonLSetTeXt(连接成功)MyThreadt=newMyThreadO;t.start();/获取当前时间的方法staticStringgetTime()(inth,m,s;StringnowTime;Calendart;t=CalendaEgetInstanceO;h=t.get(t.HOUR_OF_DAY);m=t.get(t.MINUTE);s=t.get(t.SECOND);nowTime=h+“点”+m+“分+s+“秒returnnowTime;)/serve

22、rimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.io.*;.*;importjava.util.*;publicclassServer2extendsJFrameimplementsActionListenerContainercont=newContainer();JPanelContentPane;JLabeljLabe12=newJLabel();JTextFieIdjTextField2=newJTextField(4700);JButtonjButtonl=newJButton();JLa

23、beIjLabe13=newJLabel();JTextFieIdjTextField3=newJTextField();JButtonjButton2=newJButton();JScrollPanejScrollPane1=newJSCronPane();创建一个带有滚动条的面板。JTextAreaJTextArea1=newJTeXtArea();/创建一个多行纯文本区域。JLabeljLabe!4=newJLabel();ServerSocketserver=null;/服务器套接字的创建。Socketsocket=null;BufferedReaderinstr=null;Print

24、Writeros=null;客户端套接字的创建。/Constructtheframepublicstaticvoidmain(Stringargs)(JFrame.SetDefaultLookAndFeelDecorated(Irue);Server2frm=newServer2();fnn.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setVisible(true);publicServer2()ContentPane=(JPaneI)this.getContentPane();contentPane.setLayout(null);

25、this.setBounds(newRectangle(256,232,532,233);this.setTitle(nserver);jLabe12.setBounds(newRectangle(23,27,72,28);jLabel2.setText(“端口号”);jLabel2.setFont(newjava.awt.Font(宋体”,0,14);jTextField2.setBounds(newRectangle(l13,27,72,24);jButton1.setBounds(newRectangle(440,28,73,25);jButton1.setFont(newjava.aw

26、t.Font(Dialog,0,14);jButton!.SetBorder(BorderFactoryxreateEtchedBorderO);jButtonLSetTeXt(侦听”);jButton1.SetActionCommandCjButton);jLabe13.setBounds(newRectangle(23,57,87,28);jLabel3.setText(请输入信息”);jLabel3.setFont(newjava.awt.Font(yf,O,14);jTextField3.setBounds(newRectangle(113,60,312,24);jTextField3

27、.setText(,);jButton2.setText(发送”);jButton2.setBorder(BorderFactory.createEtchedBorder();设置边框。jButton2.setFont(newjava.awt.Font(,Dialog,0,14);jButton2.setBounds(newRectangIe(440,58,73,25);jButton2.setActionCommand(jButton);jScrollPanel.setBounds(newRectangle(l13,92,312,89);jLabe14.setBounds(newRectan

28、gle(23,87,87,28);jLabel4.setText(己发送信息”);jLabe14.setFont(newjava.awt.Font(宋体”,0,14);contentPane.add(jTextField2,null);contentPane.add(jButton1,null);contentPane.add(jLabe!3,null);contentPane.add(jTextFieId3,null);contentPane.add(jButton2,null);contentPane.add(jScrolPanel,null);contentPane.add(jLabe!

29、2,null);contentPane.add(jLabel4,nu11);jScrollPanel.getViewport().add(jTextAreal,null);jButton1.addActionListener(this);jButton2.addActionListener(this);this.addWindowListener(newWindowAdapter()(publicvoidwindowClosing(WindowEvente)socket.close();instr.close();System.exit(O);catch(Exceptionex);classM

30、yThreadextendsThread该线程负责接受数据publicvoidrun()try(while(true)this.sleep(100);instr=newBUfferedReader(newInputStreamReader(socket.getInputStream();if(instr.ready()检查是否有数据jTextAreal.append,客户端:,+instr.readLine()+n);)if(e.getSource()=jButton1)(intport=lnteger.parselnt(jTextField2.getText().trim();IistenC

31、Iient(Port);)if(e.getSource()=jButton2)(Strings=this.jTextField3.getText().trim();sendData(s);)privatevoidlistenCIient(intport)侦听try(if(jButtonl.getText().trim().equals(侦听)server=newServerSocket(port);SoCket=SerVer.accept。;/等待,一直到客户端连接才望下执行SendData(己经成功连接。”);jButtonLSetTeXt(“连接成功”);jTextAreal.append

32、(客户端已经连接到服务器n);MyThreadt=newMyThread();t.start();catch(Exceptionex)privatevoidsendData(Strings)发送数据try(os=newPrintWriter(socket.getOutputStream();os.println(s);os.flush();if(!s.equals(己经成功连接。”)IhisJTextAreaL叩Pend(发送:(+getTime()+”)+s+n);catch(Exceptionex)/获取当前时间的方法staticStringgetTime()(inth,m,s;StringnowTime;Calendart;t=CalendaEgetInstanceO;h=t.get(t.HOUR_OF_DAY);m=t.get(t.MINUTE);s=t.get(t.SECOND);nowTime=h+“点“+m+“分“+S+“秒returnnowTime;

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号