一對(duì)一客戶通知器Java課程設(shè)計(jì)報(bào)告_第1頁(yè)
一對(duì)一客戶通知器Java課程設(shè)計(jì)報(bào)告_第2頁(yè)
一對(duì)一客戶通知器Java課程設(shè)計(jì)報(bào)告_第3頁(yè)
一對(duì)一客戶通知器Java課程設(shè)計(jì)報(bào)告_第4頁(yè)
一對(duì)一客戶通知器Java課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

湖南商學(xué)院《面對(duì)對(duì)象程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告題目一對(duì)一客戶通知器姓名:學(xué)號(hào):專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班級(jí):計(jì)科指導(dǎo)教師:職稱:講師計(jì)算機(jī)與電子工程學(xué)院2009年6月課程設(shè)計(jì)評(píng)審表姓名學(xué)院計(jì)算機(jī)與電子工程學(xué)院學(xué)號(hào)專業(yè)班級(jí)計(jì)科題目一對(duì)一客戶通知器評(píng)審意見(jiàn)評(píng)審成績(jī)指導(dǎo)教師簽名職稱評(píng)審時(shí)間年月日目錄TOC\o"1-3"\f1課程設(shè)計(jì)題目描述和基本設(shè)計(jì)要求 41.1題目描述 41.2基本設(shè)計(jì)要求 42系統(tǒng)需求分析與設(shè)計(jì) 42.1系統(tǒng)需求分析 42.1.1功能需求分析 42.1.2其他需求分析 42.2系統(tǒng)設(shè)計(jì) 52.2.1總體設(shè)計(jì) 52.2.2詳細(xì)設(shè)計(jì) 53系統(tǒng)測(cè)試與使用說(shuō)明 73.1系統(tǒng)測(cè)試 73.2系統(tǒng)使用說(shuō)明 93.2.1系統(tǒng)中存在的問(wèn)題 104課程設(shè)計(jì)總結(jié) 104.1遇到的問(wèn)題及解決辦法 104.2心得體會(huì) 10附錄 11一對(duì)一客戶通知器1課程設(shè)計(jì)題目描述和基本設(shè)計(jì)要求1.1題目描述本程序是基于對(duì)單個(gè)特殊用戶(如VIP用戶)進(jìn)行實(shí)時(shí)通知的需求而產(chǎn)生的。要求實(shí)現(xiàn)在服務(wù)器端發(fā)送消息,并顯示發(fā)送時(shí)的具體時(shí)間,由單個(gè)客戶端接收。1.2基本設(shè)計(jì)要求界面應(yīng)盡量簡(jiǎn)潔,易于操作,功能一目了然。2系統(tǒng)需求分析與設(shè)計(jì)2.1系統(tǒng)需求分析2.1.1功能需求分析1、能進(jìn)行由服務(wù)器端到客戶端的實(shí)時(shí)消息的發(fā)送;2、只支持單一客戶端一對(duì)一發(fā)送消息;3、由服務(wù)端先發(fā)送請(qǐng)求,客戶端同意接收時(shí)開(kāi)始發(fā)送;2.1.2其他需求分析(1)性能要求使用性強(qiáng),占用內(nèi)存空間小,運(yùn)行速度快。(2)設(shè)計(jì)約束開(kāi)發(fā)工具:jdk1.5運(yùn)行環(huán)境:Windows2000,WindowsXP(3)界面要求可視圖形界面,以JAVA的默認(rèn)觀感為UI,確保能在移植的情況下正常使用。2.2系統(tǒng)設(shè)計(jì)2.2.1總體設(shè)計(jì)在用戶界面方面,盡量做到美觀大方,簡(jiǎn)潔易用。無(wú)菜單欄,因?yàn)橥瓿尚畔⒌陌l(fā)送不需要用戶過(guò)多的設(shè)置,使操作更為簡(jiǎn)單。整個(gè)界面大約占到桌面的1/16,小巧精致。在服務(wù)器端包含“偵聽(tīng)”“發(fā)送”兩個(gè)按鈕,而在客戶端只包含“連接”一個(gè)按鈕。服務(wù)端與客戶端都有可滾動(dòng)的文本顯示域,方便查看已發(fā)送的信息。在服務(wù)端有輸入文本的區(qū)域。最重要的是客戶端和服務(wù)端都有端口地址的輸入域,只有保證這個(gè)域的內(nèi)容相同才能成功進(jìn)行連接??蛻舳擞幸粋€(gè)本地IP域。整個(gè)工作2.2.2詳細(xì)設(shè)計(jì)這個(gè)簡(jiǎn)易客戶通知器由用戶界面和網(wǎng)絡(luò)兩部分構(gòu)成。(1)用戶界面包含有以下幾個(gè)類的使用:JFramejava.awt.Frame的擴(kuò)展版本,該版本添加了對(duì)JFC/Swing組件架構(gòu)的支持。它是本程序中使用的框架,與Frame不同,它特屬swing的組件,擁有更強(qiáng)的功能特性。JPanel它是本程序的面板,其本身也是一個(gè)容器。與普通的容器不同的是,它具有顯示繪圖的功能。JTextFieldJTextField具有建立字符串的方法,此字符串用作針對(duì)被激發(fā)的操作事件的命令字符串。它是本程序中使用的文本域,是一個(gè)固定文本域。JTextArea多行純文本顯示域。JLabel標(biāo)簽域,用于顯示固定的不可更改的字符,具有提示用戶的作用。JButton按鈕,有觸發(fā)事件的功能。JScrollPane可設(shè)橫向與縱向滾動(dòng)功能的文本域,由它可以顯示大量文本信息。Thread線程,可根據(jù)系統(tǒng)需要單獨(dú)執(zhí)行一項(xiàng)程序。CalendarDateFormat使用calendar來(lái)生成實(shí)現(xiàn)日期和時(shí)間格式化所需的時(shí)間字段值。子類應(yīng)將此calendar初始化為適合于與此DateFormat關(guān)聯(lián)的語(yǔ)言環(huán)境的日歷。包含以下接口的實(shí)現(xiàn):ActionListener用于監(jiān)聽(tīng)事件的發(fā)生,用actionPerformed方法來(lái)實(shí)現(xiàn)事件的反應(yīng)機(jī)制。網(wǎng)絡(luò)在網(wǎng)絡(luò)應(yīng)用的實(shí)現(xiàn)方面,需要導(dǎo)入一個(gè)包,由于要借助流來(lái)實(shí)現(xiàn),java.io包和java.util包也是需要的。Socket由于要實(shí)現(xiàn)網(wǎng)絡(luò)通訊,套接字是一個(gè)不錯(cuò)的選擇。它想一條虛擬的光纜,將兩臺(tái)(或多臺(tái))主機(jī)連接起來(lái)。套接字是通訊雙方的一種約定,用套接字中的相關(guān)函數(shù)來(lái)完成通信過(guò)程。區(qū)別不同應(yīng)用程序進(jìn)程間的通信過(guò)程,主要有三個(gè)參數(shù)。它們是:通信的目的IP地址、使用的傳輸層協(xié)議(TCP或UDP)、使用的端口號(hào)。Socket原意是“插座”。通過(guò)將這3個(gè)參數(shù)結(jié)合起來(lái),與一個(gè)“插座”Socket綁定,應(yīng)用層就可以和傳輸層通過(guò)套接字接口,區(qū)分來(lái)自不同應(yīng)用程序進(jìn)程或網(wǎng)絡(luò)連接的通信,實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)。套接字的工作圖示如下:圖1套接字3系統(tǒng)測(cè)試與使用說(shuō)明3.1系統(tǒng)測(cè)試執(zhí)行服務(wù)端程序后,會(huì)出現(xiàn)如下界面:圖2測(cè)試1其中端口號(hào)是預(yù)置的,為“4700”??梢郧宄乜吹?,窗體中共有三個(gè)標(biāo)簽“端口號(hào)”、“請(qǐng)輸入信息”、“已發(fā)送信息”,三個(gè)文本域(其中有一個(gè)是帶縱向滾動(dòng)功能的),兩個(gè)按鈕“偵聽(tīng)”、“發(fā)送”。由于是DefaultLookAndFeel(java的默認(rèn)觀感),界面的放大、縮小按鈕以及關(guān)閉按鈕都已經(jīng)自動(dòng)生成,形狀也已統(tǒng)一畫好。當(dāng)要完成發(fā)送信息的任務(wù)時(shí),我們可以先在服務(wù)端這邊點(diǎn)“偵聽(tīng)”按鈕,等待客戶端響應(yīng);當(dāng)客戶端點(diǎn)擊“連接”按鈕后,便會(huì)在客戶端與服務(wù)端提示已連接成功,此時(shí)連接工作便完成了。以下是客戶端的初始狀態(tài)圖示:圖3測(cè)試2其中,主機(jī)名稱和端口號(hào)的值是預(yù)置的。客戶端只有一個(gè)按鈕“連接”,它需要在服務(wù)端的“偵聽(tīng)”按鈕被按下后被按下。連接成功后,會(huì)出現(xiàn)以下界面:圖4測(cè)試3此時(shí),客戶端與服務(wù)端的“連接”“偵聽(tīng)”按鈕上的文字改為“連接成功”,同時(shí)在服務(wù)端的“已發(fā)送信息”文本框中顯示信息“客戶端已經(jīng)連接到服務(wù)器”,客戶端的“已收到信息”文本框中顯示信息“收到:(16點(diǎn)59分49秒)已經(jīng)成功連接”,表示在本機(jī)時(shí)間16點(diǎn)59分49秒成功建立連接。好的,接下來(lái)就可以給客戶端發(fā)送信息了!例如,服務(wù)器端發(fā)送信息“今天8點(diǎn)到賢德11棟樓下會(huì)面”,先在服務(wù)器端“請(qǐng)輸入信息”后輸入信息,點(diǎn)發(fā)送,便會(huì)出現(xiàn)如下圖所示的效果:圖5測(cè)試4客戶端成功接收到信息,成功。3.2系統(tǒng)使用說(shuō)明在客戶端和服務(wù)器端同時(shí)運(yùn)行的前提下,確保端口號(hào)一致。其實(shí)系統(tǒng)預(yù)置的端口號(hào)是一致的,用戶不需要更改??蛻舳说闹鳈C(jī)名稱要填好,系統(tǒng)預(yù)置是“”,用戶也不需要更改。服務(wù)器端點(diǎn)擊“偵聽(tīng)”按鈕,待客戶端點(diǎn)擊“連接”按鈕后,等待到按鈕文字變?yōu)椤斑B接成功”時(shí),表示已經(jīng)成功連接。由服務(wù)器端在“請(qǐng)輸入信息”欄中輸入需要發(fā)送的信息,然后點(diǎn)擊“發(fā)送”按鈕。若成功,在服務(wù)器端的“已發(fā)送信息”文本框和客戶端的“已收到信息”文本框會(huì)顯示發(fā)送的信息和當(dāng)前主機(jī)的時(shí)間。3.2.1系統(tǒng)中存在的問(wèn)題由于時(shí)間有限,本系統(tǒng)還存在很多不足之處。比如,當(dāng)服務(wù)器端按“偵聽(tīng)”按鈕后,客戶端無(wú)法獲知服務(wù)器端是否按下“偵聽(tīng)”按鈕。只有在兩者知道通信時(shí)間時(shí)才能在正確的時(shí)間按下按鈕。4課程設(shè)計(jì)總結(jié)4.1遇到的問(wèn)題及解決辦法在此次課程設(shè)計(jì)過(guò)程中,經(jīng)歷了艱難的調(diào)試過(guò)程。因?yàn)榉椒ㄊ撬赖?,類也有詳?shí)的記載,將類和發(fā)法組合到一篇代碼中也不是件難事。但是在調(diào)試的過(guò)程中遇到了各種各樣的問(wèn)題,讓我不得不一遍又一遍的修改代碼。有時(shí)甚至完全顛覆當(dāng)初的思路,改換其他的方法。后來(lái)我通過(guò)思考,了解到,之所以會(huì)遇到這么大的困難,主要是對(duì)JAVA這門計(jì)算機(jī)語(yǔ)言的認(rèn)識(shí)很不夠,一些細(xì)節(jié)根本不知道。但是事已至此,必須要在規(guī)定的時(shí)間內(nèi)趕出來(lái),于是我不斷參照不同程序編寫者的方法,一個(gè)一個(gè)調(diào)試??芍^用汗水換來(lái)了集中他人智慧與我自己改良的最終程序。雖然和一開(kāi)始的初衷不太一樣,但是在我還想調(diào)試的時(shí)候,發(fā)現(xiàn)時(shí)間已經(jīng)不夠了,所以只好將這件“未完成”的作品呈上。對(duì)于我的初衷來(lái)說(shuō),它是不合格的;但是作為我這些天努力的回報(bào),我覺(jué)得它還是一份令我滿意的答卷。4.2心得體會(huì)學(xué)習(xí)是一件極費(fèi)腦力的活,必須以相當(dāng)認(rèn)真的態(tài)度去對(duì)待。通過(guò)這次的學(xué)習(xí),我發(fā)現(xiàn)我還要學(xué)的東西有很多,不僅僅是一門計(jì)算機(jī)語(yǔ)言,更重要的是對(duì)問(wèn)題的態(tài)度以及如何解決它的一些技巧。比如在寫一大版代碼時(shí),有時(shí)我自己都覺(jué)得十分凌亂,這時(shí)我就開(kāi)始重新將這些代碼分塊,每一塊都不大,但能夠?qū)崿F(xiàn)一個(gè)簡(jiǎn)單的功能。將創(chuàng)建的每一個(gè)類和變量取一個(gè)合適的名字,這樣有利于自己理解。后來(lái),我回過(guò)頭來(lái)看自己寫的代碼,也不覺(jué)得凌亂了。附錄//clientprogramimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.io.*;import.*;importjava.util.*;publicclassClient2extendsJFrameimplementsActionListener{Containercont=newContainer();JPanelcontentPane;JLabeljLabel1=newJLabel();JLabeljLabel2=newJLabel();JTextFieldjTextField1=newJTextField("");JTextFieldjTextField2=newJTextField("4700");JButtonjButton1=newJButton();JScrollPanejScrollPane1=newJScrollPane();//創(chuàng)建一個(gè)帶有滾動(dòng)條的面板。JTextAreajTextArea1=newJTextArea();//創(chuàng)建一個(gè)多行純文本區(qū)域。JLabeljLabel4=newJLabel();ServerSocketserver=null;//服務(wù)器套接字的創(chuàng)建。Socketsocket=null;BufferedReaderinstr=null;PrintWriteros=null;//客戶端套接字的創(chuàng)建。//Constructtheframepublicstaticvoidmain(String[]args){JFrame.setDefaultLookAndFeelDecorated(true);Client2frm=newClient2();frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setVisible(true);}publicClient2(){contentPane=(JPanel)this.getContentPane();contentPane.setLayout(null);this.setBounds(newRectangle(256,232,532,233));this.setTitle("client");jLabel1.setFont(newjava.awt.Font("宋體",0,14));jLabel1.setText("主機(jī)名稱");jLabel1.setBounds(newRectangle(200,27,72,28));jLabel2.setBounds(newRectangle(23,27,72,28));jLabel2.setText("端口號(hào)");jLabel2.setFont(newjava.awt.Font("宋體",0,14));jTextField1.setBounds(newRectangle(276,27,72,24));jTextField2.setBounds(newRectangle(113,27,72,24));jButton1.setBounds(newRectangle(440,28,73,25));jButton1.setFont(newjava.awt.Font("Dialog",0,14));jButton1.setBorder(BorderFactory.createEtchedBorder());jButton1.setText("連接");jButton1.setActionCommand("jButton1");jScrollPane1.setBounds(newRectangle(113,92,312,89));jLabel4.setBounds(newRectangle(23,87,87,28));jLabel4.setText("已收到信息");jLabel4.setFont(newjava.awt.Font("宋體",0,14));contentPane.add(jLabel1,null);contentPane.add(jTextField1,null);contentPane.add(jTextField2,null);contentPane.add(jButton1,null);contentPane.add(jScrollPane1,null);contentPane.add(jLabel2,null);contentPane.add(jLabel4,null);jScrollPane1.getViewport().add(jTextArea1,null);jButton1.addActionListener(this);this.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){try{socket.close();instr.close();System.exit(0);}catch(Exceptionex){}}});}classMyThreadextendsThread{//與服務(wù)器不同。publicvoidrun(){try{os=newPrintWriter(socket.getOutputStream());instr=newBufferedReader(newInputStreamReader(socket.getInputStream()));while(true){this.sleep(100);if(instr.ready()){jTextArea1.append("收到:("+getTime()+")"+instr.readLine()+"\n");}}}catch(Exceptionex){}}}publicvoidactionPerformed(ActionEvente){if(e.getSource()==jButton1){Stringip=jTextField1.getText().trim();intport=Integer.parseInt(jTextField2.getText().trim());connectServer(ip,port);}}privatevoidconnectServer(Stringip,intport){//連接//這里也與服務(wù)器不同。try{if(jButton1.getText().trim().equals("連接")){socket=newSocket(ip,port);jButton1.setText("連接成功");MyThreadt=newMyThread();t.start();}}catch(Exceptionex){}}//獲取當(dāng)前時(shí)間的方法 staticStringgetTime() { inth,m,s; StringnowTime; Calendart; t=Calendar.getInstance(); h=t.get(t.HOUR_OF_DAY); m=t.get(t.MINUTE); s=t.get(t.SECOND); nowTime=h+"點(diǎn)"+m+"分"+s+"秒"; returnnowTime; }}//serverimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.io.*;import.*;importjava.util.*;publicclassServer2extendsJFrameimplementsActionListener{Containercont=newContainer();JPanelcontentPane;JLabeljLabel2=newJLabel();JTextFieldjTextField2=newJTextField("4700");JButtonjButton1=newJButton();JLabeljLabel3=newJLabel();JTextFieldjTextField3=newJTextField();JButtonjButton2=newJButton();JScrollPanejScrollPane1=newJScrollPane();//創(chuàng)建一個(gè)帶有滾動(dòng)條的面板。JTextAreajTextArea1=newJTextArea();//創(chuàng)建一個(gè)多行純文本區(qū)域。JLabeljLabel4=newJLabel();ServerSocketserver=null;//服務(wù)器套接字的創(chuàng)建。Socketsocket=null;BufferedReaderinstr=null;PrintWriteros=null;//客戶端套接字的創(chuàng)建。//Constructtheframepublicstaticvoidmain(String[]args){JFrame.setDefaultLookAndFeelDecorated(true);Server2frm=newServer2();frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setVisible(true);}publicServer2(){contentPane=(JPanel)this.getContentPane();contentPane.setLayout(null);this.setBounds(newRectangle(256,232,532,233));this.setTitle("server");jLabel2.setBounds(newRectangle(23,27,72,28));jLabel2.setText("端口號(hào)");jLabel2.setFont(newjava.awt.Font("宋體",0,14));jTextField2.setBounds(newRectangle(113,27,72,24));jButton1.setBounds(newRectangle(440,28,73,25));jButton1.setFont(newjava.awt.Font("Dialog",0,14));jButton1.setBorder(BorderFactory.createEtchedBorder());jButton1.setText("偵聽(tīng)");jButton1.setActionCommand("jButton1");jLabel3.setBounds(newRectangle(23,57,87,28));jLabel3.setText("請(qǐng)輸入信息");jLabel3.setFont(newjava.awt.Font("宋體",0,14));jTextField3.setBounds(newRectangle(113,60,312,24));jTextField3.setText("");jButton2.setText("發(fā)送");jButton2.setBorder(BorderFactory.createEtchedBorder());//設(shè)置邊框。jButton2.setFont(newjava.awt.Font("Dialog",0,14));jButton2.setBounds(newRectangle(440,58,73,25));jButton2.setActionCommand("jButton1");jScrollPane1.setBounds(newRectangle(113,92,312,89));jLabel4.setBounds(newRectangle(23,87,87,28));jLabel4.setText("已發(fā)送信息");jLabel4.setFont(newjava.awt.Font("宋體",0,14));contentPane.add(jTextField2,null);contentPane.add(jButton1,null);contentPane.add(jLabel3,null);contentPane.add(jTextField3,null);contentPane.add(jButton2,null);contentPane.add(jScrollPane1,null);contentPane.add(jLabel2,null);contentPane.add(jLabel4,null);jScrollPane1.getViewport().add(jTextArea1,null);jButton1.addActionListener(this);jButton2.addActionListener(this);this.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){try{socket.close();instr.close();System.exit(0);}catch(Exceptionex){}}});}classMyThreadextendsThread{//該線程負(fù)責(zé)接受數(shù)據(jù)publicvoidrun(){try{while(true){this.sleep(100);instr=newBufferedReader(newInputStreamReader(socket.getInputStream()));if(instr.ready()){//檢查是否有數(shù)據(jù)jTextArea1.append("客戶端:"+instr.readLine()+"\n");}}}catch(Exceptionex){}}}publicvoidactionPerformed(ActionEvente){if(e.getSourc

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論