java課程設(shè)計報告-網(wǎng)絡(luò)監(jiān)聽程序_第1頁
java課程設(shè)計報告-網(wǎng)絡(luò)監(jiān)聽程序_第2頁
java課程設(shè)計報告-網(wǎng)絡(luò)監(jiān)聽程序_第3頁
java課程設(shè)計報告-網(wǎng)絡(luò)監(jiān)聽程序_第4頁
java課程設(shè)計報告-網(wǎng)絡(luò)監(jiān)聽程序_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目錄 TOC o 1-3 h z u HYPERLINK l _Toc326824721 一、設(shè)計題目 PAGEREF _Toc326824721 h 1 HYPERLINK l _Toc326824722 二、設(shè)計目的 PAGEREF _Toc326824722 h 1 HYPERLINK l _Toc326824723 三、設(shè)計原理及方案 PAGEREF _Toc326824723 h 1 HYPERLINK l _Toc326824724 1使用的軟件工具和環(huán)境 PAGEREF _Toc326824724 h 1 HYPERLINK l _Toc326824725 2需求分析與概要設(shè)計

2、PAGEREF _Toc326824725 h 1 HYPERLINK l _Toc326824726 3詳細(xì)設(shè)計和關(guān)鍵問題 PAGEREF _Toc326824726 h 2 HYPERLINK l _Toc326824727 四、實現(xiàn)效果 PAGEREF _Toc326824727 h 5 HYPERLINK l _Toc326824728 五、設(shè)計體會 PAGEREF _Toc326824728 h 7 HYPERLINK l _Toc326824729 參考文獻(xiàn) PAGEREF _Toc326824729 h 8一、設(shè)計題目網(wǎng)絡(luò)監(jiān)聽程序二、設(shè)計目的進(jìn)一步鞏固Java基礎(chǔ)理論和知識,加深

3、Java面向?qū)ο筇匦缘睦斫?,以及加強多線程的應(yīng)用,并通過對網(wǎng)絡(luò)編程的一些基礎(chǔ)應(yīng)用來提高利用面向?qū)ο蟮某绦蛟O(shè)計方法解決問題的能力,并鍛煉利用開發(fā)工具實現(xiàn)Java應(yīng)用軟件的基本技能。三、設(shè)計原理及方案1使用的軟件工具和環(huán)境該程序運行在windows XP系統(tǒng)下,并利用Netbeans 6.0來開發(fā)和調(diào)試,其中jdk版本為jdk1.6。2需求分析與概要設(shè)計(1)系統(tǒng)需求本課題要求使用圖形用戶界面。包括服務(wù)器端和客戶端(多個)兩個組成部分,其中,服務(wù)器端負(fù)責(zé)偵聽客戶端的登錄請求消息,當(dāng)接收到登錄的消息,則將對應(yīng)的燈變綠,否則顯示紅色,并實時地將在線客戶端的消息發(fā)送給其它在線客戶端??蛻舳素?fù)責(zé)發(fā)出登錄消

4、息,并接收從服務(wù)器回傳的其它客戶端的消息,并以燈的變綠或紅顯示出來。(2)系統(tǒng)功能描述當(dāng)客戶端輸入用戶名,并點擊“登錄”按鈕后,它便與服務(wù)器建立了一個socket會話。通過此socket會話,讓兩者之間通過信息的交流來達(dá)到實時響應(yīng)的效果。此刻,在服務(wù)器端保存有多個socket會話,每個都關(guān)聯(lián)一個客戶端進(jìn)程。(3)系統(tǒng)結(jié)構(gòu)描述由于程序要求較為簡單,因此完全可以在一個包內(nèi)實現(xiàn)其基本功能。這個包里存在4個類,server,clientA,clientB,clientC。Server類:利用多線程來監(jiān)聽多個客戶端,并將對應(yīng)客戶端的燈變綠。同時回傳消息,告知即時在線客戶端。ClassA(B、C):實現(xiàn)根

5、據(jù)正確的用戶名登錄服務(wù)器,并接收服務(wù)器發(fā)回的消息,并改變對應(yīng)的燈的顏色。具體包圖如圖1所示。圖1 包圖3詳細(xì)設(shè)計和關(guān)鍵問題首先,對于程序的分解實際上,只有兩個主要的類,即server類和client類,因為客戶端的行為基本一致,故而其代碼也基本相同,只須將注意力放在這兩個方面即可。 圖2 server類 圖3 clientA類 SHAPE * MERGEFORMAT 對于server類,如圖2所示,因為要完成監(jiān)聽多個客戶端的任務(wù),所以必須用到多線程,為每個已登錄client分配一個線程,并且處于循環(huán)監(jiān)聽的狀態(tài)。當(dāng)創(chuàng)建了一個線程后,便可利用其中的方法來控制燈的亮與滅,并回送信息給客戶端。其中,對

6、于哪個客戶端的亮與滅,利用了循環(huán)判斷的switch語句,判斷的條件是用戶傳過來的字符串,若與其中的條件匹配則將相應(yīng)的燈變?yōu)榫G色。對于回傳的過程則相對復(fù)雜些,主要用到了stringbuffer 類和循環(huán)向客戶端發(fā)送stringbuffer類定義的字符串。對于client類,如圖3所示,首先是要定義socket對象,其中遠(yuǎn)程服務(wù)器的地址為127.0.0.1,端口號為8888,接著定義輸入流dis和輸出流dos,它們分別利用getInputStream()和getOutputStream()方法來獲取網(wǎng)絡(luò)輸入流和輸出流。然后利用getText()方法讀取文本框jTxtUsername的內(nèi)容給變量us

7、ername ,這其中用到了對用戶名的認(rèn)證,當(dāng)用戶名不正確時,會在屏幕上顯示“用戶名不正確”,若正確則利用dos.writeUTF(username)將登錄消息傳給服務(wù)器。這些是在jLoginActionPerformed()方法中實現(xiàn)的。然后要讀取服務(wù)器回傳的消息,這其中用到了線程。在client對象創(chuàng)建的同時創(chuàng)建一個waiter線程,線程中的run()方法里利用循環(huán),其中循環(huán)的條件是判斷canWaiter的值是否是true,而我們一直偵聽服務(wù)器回傳的消息,所以其值被初始化為true,所以會不斷的接收從服務(wù)器端傳來的字符串,又添加了一個for循環(huán),for語句中的結(jié)束判斷條件為傳過來的字符串的

8、長度user.length()(其中user為接收的字符串),并利用switch語句遍歷每一個字符,當(dāng)收到的字符與switch中的條件匹配時,將相當(dāng)燈的顏色變?yōu)榫G色。最后,當(dāng)觸發(fā)formWindowClosing()事件時,應(yīng)該關(guān)閉socket 。這是通過向服務(wù)傳送message=“a(b,c)close”的消息,dos.writeUTF(message),來通知服務(wù)器關(guān)閉相應(yīng)的燈,然后關(guān)閉當(dāng)前客戶端的socket連接。其中,每個客戶端的功能是一樣的,所以它里面的方法和屬性基本相同,所不同的只是當(dāng)用戶去登錄時,所填寫的用戶名。如,clientA,當(dāng)它登錄時用的是“A”這個用戶名稱,而clien

9、tB登錄時則用的是“B”這個名稱。另外,還有一點就是,在我們這個程序中,對客戶端的數(shù)量是靜態(tài)指派的,并不是動態(tài)生成,也就是說,只有clientA,clientB,clientC這三個客戶端,當(dāng)又有客戶端想要登錄服務(wù)器時,是不能完成請求的,因為在程序中并沒有定義其它客戶端。而如果要實現(xiàn)這個功能,可能就要用到數(shù)據(jù)庫,但由于時間限制,這個問題我們打算留到以后再去研究。系統(tǒng)流程圖如圖4所示。server client開始偵聽client請求ss.accept(),讀入登錄消息dis.readUTF()Dis.readUTF()根據(jù)傳入的消息控制燈的亮與滅jBtnA(B,C).setBackground

10、(Color.green)向client回傳其它在線client的消息Out.writeUTF(userlist.toString()消息為“a(b,c)close”關(guān)閉流,關(guān)閉會話dis.close(),out.close()YN開始輸入用戶名A(B,C)向server發(fā)送登錄消息dos.writeUTF(username)讀取server發(fā)來的在線client消息,dis.readUTF()判斷并控制相當(dāng)燈的亮滅Switch(user.charAt(i)jA(B,C).setBackground(Clor.green)顯示“用戶名不正確”NY關(guān)閉流,關(guān)閉會話Dos.close(),sock

11、et.close()圖4 系統(tǒng)流程圖關(guān)鍵問題:在設(shè)計過程中,很重要一點就是如何控制其它在線客戶端的燈的亮與滅。通過上網(wǎng)查相關(guān)資料,了解到可以利用循環(huán),并根據(jù)接收字符串的長度,即user.length()來遍歷字符串,這樣就可以實時地接收服務(wù)器的消息,并即時顯示當(dāng)前在線客戶端。四、實現(xiàn)效果1、未登錄前界面如圖5所示。圖5 未登錄前界面此時,server 偵聽client 的消息。2、client A登錄 此時,client A向server發(fā)送字符“A”。界面如圖6所示。圖6 clientA登錄3、client B, C相繼登錄,此時每個客戶都會顯示當(dāng)前在線的客戶端。如圖7所示。圖7 clien

12、tA,B,C均登錄4、當(dāng)client A下線時,其它客戶端也會將相應(yīng)的燈變紅。界面如圖8所示。 圖8 clientA下線五、設(shè)計體會這次實驗讓我學(xué)到了很多東西,以前根本沒有接觸過類似的編程設(shè)計,所以剛碰到這個課題的時候,真是一頭霧水,毫無頭緒。不過,有句話說的好,萬事開頭難,只要腳踏實地,從眼前開始做起,一步一步地來,總會走到我們想要到達(dá)的目的地。所以,為了能夠完成這個任務(wù),我先是又翻了遍書。不得不說,書上的東西只有到用到它的時候才會真正意識到它的作用,直到此刻我才明白什么是socket,什么是接口的實現(xiàn),什么是多線程。一句話,實踐是檢驗真理的唯一標(biāo)準(zhǔn)??吹竭@本書的最后,我終于有了一些頭緒。并且對書上最后的例題和課設(shè)的要求做了下比較,發(fā)現(xiàn)這兩者有共同之處:都用到了多線程和socket編程。于是,我們組對這個設(shè)計進(jìn)行了分工,客戶端和服務(wù)器分別來設(shè)計。當(dāng)然,在設(shè)計過程中,這兩個部分也需要經(jīng)常聯(lián)系起來解決問題,比如在將服務(wù)器的消息傳到客戶端時,就要考慮到在兩者之間建立一個stringbuffer變量,來存儲字符串。這期間

溫馨提示

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

評論

0/150

提交評論