




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告 學(xué)生姓名 學(xué)號(hào) 班級(jí) 指導(dǎo)教師 設(shè)計(jì)時(shí)間目錄 第一章系統(tǒng)描述 設(shè)計(jì)目的 . 3 系統(tǒng)設(shè)計(jì)任務(wù) . 3 系統(tǒng)設(shè)計(jì)分析 . 3 系統(tǒng)功能分析 . 4 第二章功能模塊結(jié)構(gòu) 模塊劃分 . 5 模塊結(jié)構(gòu)圖 . 5 模塊功能 . 5 第三章模塊算法實(shí)現(xiàn) 服務(wù)器實(shí)現(xiàn) . 6 客戶端實(shí)現(xiàn) . 9 第四章運(yùn)行結(jié)果 . 13 第五章課程設(shè)計(jì)總結(jié) . 17 第六章附錄 參考文獻(xiàn) . 19 源代碼 . 19 第一章系統(tǒng)描述 設(shè)計(jì)目的 1 學(xué)習(xí)網(wǎng)絡(luò)編程的知識(shí),掌握網(wǎng)絡(luò)編程的方法。 2 進(jìn)一步掌握編程思想與編程技巧,做到模塊化程序設(shè)計(jì), 3. 強(qiáng)化語(yǔ)言學(xué)習(xí),尤其是 Java的圖形界面與多線程,需反
2、復(fù)練習(xí),熟練掌握。 系統(tǒng)設(shè)計(jì)任務(wù) 聊天室軟件的設(shè)計(jì)與開(kāi)發(fā):基本要求可以完成群聊、私人聊天,實(shí)時(shí)發(fā)送和顯示聊天信息,完成好 友列表;進(jìn)一步要求帶表情,附件發(fā)送,聊天信息的加密傳送,設(shè)置黑名單等。 學(xué)習(xí)通信編程 Socket接口編程,使用 TCP或UDP接口完成信息傳送,利用多線程技術(shù)實(shí)現(xiàn)服務(wù)器 端的多個(gè)TCP連接的建立。 系統(tǒng)設(shè)計(jì)分析 一實(shí)現(xiàn)網(wǎng)絡(luò)聊天室編程,關(guān)鍵在于 Socket通信,程序的功能都是在 Socket的基礎(chǔ)上一層一層增 加的。實(shí)現(xiàn) Socket通信的基本方法為以下 4個(gè)步驟。 (1) 在客戶端與服務(wù)器端創(chuàng)建相應(yīng)的 ServerSockot/Socket實(shí)例。 (2) 打開(kāi)連接到So
3、cket的輸入輸岀流 (3) 利用輸入輸岀流,按照一定的協(xié)議( TCP協(xié)議)對(duì)Socket進(jìn)行讀寫(xiě)操作 (4) 關(guān)閉輸入輸岀流和 Socket 我們要實(shí)現(xiàn)的功能都是在第 3步對(duì)Socket的輸入輸岀流做相應(yīng)的操作 戶服務(wù),主線程只負(fù)責(zé)循環(huán)等待,處理線程負(fù)責(zé)網(wǎng)絡(luò)連接,接受客戶輸入的信 息,再做相應(yīng)的處理。 系統(tǒng)功能分析 本系統(tǒng)可以通過(guò)網(wǎng)絡(luò)進(jìn)行聊天,采用客戶端服務(wù)器模式,所以程序簡(jiǎn)介清晰易懂,而且用戶都 是在客戶端進(jìn)行活動(dòng),方便對(duì)用戶的管理,也使得程序運(yùn)行與差錯(cuò)簡(jiǎn)單起來(lái)。采用了多線程技術(shù), 可以做到多人同時(shí)在線,提高了系統(tǒng)的性能,增強(qiáng)了系統(tǒng)的實(shí)用性。有簡(jiǎn)單的客戶端界面,方便用 戶使用。采用的是 T
4、CP協(xié)議,這是可靠的,穩(wěn)定的協(xié)議,這樣不會(huì)丟失任何包,也就不會(huì)丟失任何 信息。 本系統(tǒng)實(shí)現(xiàn)的功能有: 1. 用戶名字登錄 Close Close 2. 用戶之間的群聊 3. 用戶之間的私聊 4. 動(dòng)態(tài)刷新并顯示好友列表 5. 顯示在線人數(shù) 6. 服務(wù)器可以顯示用戶在線狀態(tài) 7. 能夠退岀處理 8. 用戶上下線提醒 第二章功能模塊結(jié)構(gòu) 模塊劃分 服務(wù)器: Server 類模塊,ServerHanderson 模塊,sendallclient 模塊,sendclientlist 模塊 客戶端: Client類模塊,ServiceFrame窗口界面模塊 服務(wù)器: 1. Server類模塊:與客戶端建
5、立連接,通過(guò)套接字獲得名字,在控制端顯示提示信息 2. ServerHander模塊:提供線程管理,實(shí)現(xiàn)多用戶的管理。針對(duì)每一個(gè)用戶發(fā)過(guò)來(lái)的消息, 進(jìn)行相應(yīng)處理,再轉(zhuǎn)發(fā)給客戶。 3. Sendallclient模塊:給每個(gè)用戶發(fā)送消息。 4. Sendclientlist模塊:每當(dāng)有用戶上線,更新每個(gè)用戶的用戶列表。 客戶端: 1. Client類模塊:與服務(wù)端建立連接,用戶登錄,實(shí)現(xiàn)消息的群聊,私聊,用戶列表的更新等功 能。 2. ServiceFrame窗口界面模塊:客戶端窗口界面,實(shí)現(xiàn)用戶友好,方便用戶使用,在窗口上有 消息顯示,用戶列表,在線人數(shù)等視圖信息。 第三章模塊算法實(shí)現(xiàn) 服務(wù)器
6、實(shí)現(xiàn) 息,調(diào)用ServerHander線程進(jìn)行管理。 public Server( int port) throws lOException ServerSocketserver= n ewServerSocket(port); while (true ) Socketco nn=();rim(); 務(wù)器控制臺(tái)顯示并記錄登錄,退出信息。 2. 在客戶端控制臺(tái)輸入名字進(jìn)入聊天室。 3. 聊天界面顯示客戶端名字,好友列表,在線人數(shù)等信息。 4私聊,群聊顯示,若選擇所有人則為群聊,選擇某一個(gè)人,則為私聊。 如下圖,群聊消息,在所有客戶端都顯示,私聊信息只會(huì)在發(fā)送者與接受者中 顯示。 5.人數(shù)動(dòng)態(tài)刷新
7、。 第五章課程設(shè)計(jì)總結(jié) 從收到題目的茫然無(wú)措,不知從何下手,到最后交岀的成果,真的讓我學(xué)到了很多,可能比一 學(xué)期的JAVA和網(wǎng)絡(luò)課程設(shè)計(jì)中學(xué)到的關(guān)于 TCP協(xié)議的知識(shí)還要多,所以很感謝這次課程設(shè)計(jì),有效果 也很有意義,某種程度上比上課效果還好。 說(shuō)說(shuō)完成課程設(shè)計(jì)的整個(gè)過(guò)程吧。剛看到可以選擇的六個(gè)題目時(shí),猶如晴天霹靂,別說(shuō)用代碼 實(shí)現(xiàn)了,連題目要求都不理解,上課恍惚聽(tīng)老師提到過(guò)這個(gè)知識(shí)點(diǎn),可是重要的內(nèi)容卻一點(diǎn)也不知道, 而且,由于要做圖形界面,所以用 JAVA會(huì)更簡(jiǎn)單點(diǎn),但JAVA也忘得差不多了,所以只能從頭來(lái)過(guò),剛 開(kāi)始的3周,一點(diǎn)有關(guān)課程設(shè)計(jì)的代碼都沒(méi)寫(xiě),拿著一本從零開(kāi)始學(xué) JAVA把JAV
8、A基礎(chǔ)知識(shí),尤其 是關(guān)于網(wǎng)絡(luò)編程, 線程,圖形界面的知識(shí), 狠狠地補(bǔ)了一把, 終于更看懂一些程序結(jié)構(gòu)清晰, 沒(méi)有反射, 泛型等高端用法的程序了。在這過(guò)程中發(fā)現(xiàn),做一個(gè)普通的網(wǎng)絡(luò)聊天室,似乎不要用太多網(wǎng)絡(luò)知識(shí),懂 得Socokt和TCP的使用即可,于是開(kāi)始慢慢敲代碼了。 先把服務(wù)器與客戶端搭建起來(lái),只能實(shí)現(xiàn)連接上的作用,但什么功能都沒(méi)有,那時(shí),以為能連 接上了,那實(shí)現(xiàn)一些私聊,群聊的功能應(yīng)該很簡(jiǎn)單,但現(xiàn)實(shí)確是,只能腦中想象,真的用代碼實(shí)現(xiàn),卻 總是錯(cuò)誤百岀,做的心灰意冷,尤其是私聊功能的實(shí)現(xiàn),剛開(kāi)始,想讓服務(wù)器直接向接受者與發(fā)送者發(fā) 送消息,但總是不如人意,折騰了大概一星期,才意識(shí)到 TCP協(xié)議
9、就是用自己定義的一些規(guī)則,在服務(wù) 器與客戶端之間傳遞消息,可以添加關(guān)鍵字,再解析。于是才解決私聊問(wèn)題,然后添加好友列表與更新 好友的功能也在跌跌撞撞中實(shí)現(xiàn)了。窗口的布局,剛開(kāi)始想用網(wǎng)格包布局,但用的很不熟練,導(dǎo)致布局 不理想,無(wú)奈,只能用最基本的布局了,所以界面看上去很普通。想發(fā)送圖片,卻發(fā)現(xiàn)文本區(qū)域根本不 能顯示圖片,能用 JEditorPane實(shí)現(xiàn), 但有BUG,不知如何調(diào)試,書(shū)上,網(wǎng)上也沒(méi)找到能解決的辦法, 只能放棄了。 課程設(shè)計(jì)在這種不斷學(xué)習(xí)與摸索中差不多完成了,說(shuō)說(shuō)這次課程設(shè)計(jì)的不足吧。 1. 學(xué)過(guò)的知識(shí)不牢固,所以花費(fèi)了大量時(shí)間用來(lái)學(xué)習(xí)基礎(chǔ)知識(shí),那些應(yīng)該在以前就掌握的。 2. 程序
10、界面很普通,像老師說(shuō)的一樣,是最最古老的聊天系統(tǒng),沒(méi)有什么花哨。 3. 沒(méi)能實(shí)現(xiàn)附加功能, 像加密傳輸,文件傳送等功能。 其實(shí),挺遺憾的,因?yàn)橐郧斑x修過(guò)密碼學(xué), 應(yīng)該能夠?qū)崿F(xiàn)簡(jiǎn)單的 DES加密的。 4. 沒(méi)有用到JDBC把用戶信息存儲(chǔ)到數(shù)據(jù)庫(kù)表中,實(shí)行賬號(hào)密碼登錄,提高系統(tǒng)的安全性。 做了這么多的課程設(shè)計(jì),最大的體會(huì)就是用心去做,用心去學(xué),你一定能學(xué)到很多知識(shí),而且這 是對(duì)學(xué)過(guò)的知識(shí)的應(yīng)用,所以比單一的上課更有意思。 對(duì)于自己能獨(dú)立的完成課程設(shè)計(jì),還是頗為滿意的,至少努力沒(méi)有白費(fèi),學(xué)到的知識(shí)也非常多, 最重要的應(yīng)該是理解了 TCP協(xié)議的原理,并學(xué)會(huì)了簡(jiǎn)單的應(yīng)用, JAVA編程水平得到了一定的提
11、高,面 向?qū)ο蟮乃枷氡纫酝逦恕?第六章附錄 參考文獻(xiàn) 從零幵始學(xué) JAVA王發(fā)波中國(guó)鐵道出版社 Java2實(shí)用教程耿祥文清華大學(xué)出版社 源代碼 服務(wù)器代碼: package service; *; ) *; ) *; ) publicclass Server public Server( int port) throws IOException ServerSocketserver= n ewServerSocket(port); while (true ) *; ) *; ) import Socketc onn=(); ) publicclass Clie nt public Ser
12、viceFrame sf ; private Socket csocket ; private DataInputStream in ; private DataOutputStream out ; main( Stri BufferedReaderi n= n ewBufferedReader( n ewl nputStreamReader); 請(qǐng)輸入一個(gè)名字:); Stringwho=; try who=().trim(); /控制臺(tái)獲得名字 catch (IOExceptione) (); newClie nt(who,9992); public Client(Stringwho,Str
13、ingserver, int port) sf =newServiceFrame(who+ 的客戶端”); Stri ngstr仁 n ull ; (newExitListener( this ); try csocket =n ewSocket(server,port); in =n ew Data In putStream( n ewBufferedI nputStream(); out =n ewDataOutputStream( n ewBufferedOutputStream(); (who); ();/名字發(fā)給服務(wù)器 while (true ) str1=(); /重點(diǎn)! !,服務(wù)
14、器端發(fā)來(lái)的消息 if ($) /若以$結(jié)尾,則增添用戶 int index=( $); Stri ngstr2=(0,i ndex); elseif () /以吉尾為私聊信息 str1=(0,()-1); if (who) - +str1+ n); else if (下線)/用戶下線,刪除此用戶 int index=(下線”); Stri ngstr2=(0,i ndex); - +str1+ n); 在線人數(shù):+動(dòng)態(tài)更新在線人數(shù) catch (Exceptione) ServerError ); (); (0); protectedvoid send(Stringmsg) /發(fā)送消息給服務(wù)器
15、的方法 try (msg); (); catch (Exceptione) protectedvoid close() try (); (); (); (); catch (IOExceptionex) class ServiceFrame extends Frame JTextArea showAT; JTextField sendFD ; JComboBoxfrie ndlist ; JButton but ; JLabel showCount ; JScrollPa ne textAreaScrollPa ne ; JPanel textFieldPanel =newJPanel();
16、public ServiceFrame(Stri ngwi nn ame) super (winname); /繼承父類的名字 setSize(500,400); (newFlowLayout(0,10,10); showAT =n ewJTextArea(400,400); (false ); textAreaScrollPa ne =n ewJScrollPa ne( showAT); add( textAreaScrollPane ,; add( textFieldPanel ,; frie ndlist =n ewJComboBox(); (所有人); (frie ndlist ); sen dFD =n ewJTextField(20); (sendFD);(0); but = newJButton(發(fā)送); J (but ); showCount =newJLabel(在線人數(shù):1); (showCount ); show(); class ActListener implements ActionListener Clie nt clie nt ; ServiceFrame sframe ; public ActListe n
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年企業(yè)內(nèi)部管理能力培訓(xùn)合同范本
- 買(mǎi)賣(mài)合同工廠轉(zhuǎn)讓買(mǎi)賣(mài)合同7篇
- 書(shū)面銷售合同范本
- 買(mǎi)材料簡(jiǎn)易合同范本
- 信封代發(fā)銷售合同范本
- 公路養(yǎng)護(hù)施工合同范本
- 公司收購(gòu) 律師合同范本
- 公路路面標(biāo)線合同范本
- 到期債權(quán)轉(zhuǎn)讓合同范本
- 個(gè)人婚前房屋買(mǎi)賣(mài)合同范本
- 2024年知識(shí)競(jìng)賽-競(jìng)彩知識(shí)筆試參考題庫(kù)含答案
- 醫(yī)院DRG付費(fèi)知識(shí)培訓(xùn)課件
- 高考語(yǔ)文一輪復(fù)習(xí):文學(xué)類文本閱讀練習(xí)
- (2024年)保安培訓(xùn)圖文課件
- 中醫(yī)養(yǎng)生保健素養(yǎng)知識(shí)講座
- 雷達(dá)干擾技術(shù)概述
- JBT 7901-2023 金屬材料實(shí)驗(yàn)室均勻腐蝕全浸試驗(yàn)方法 (正式版)
- 2024年南通建筑電工證考試題模擬試題電工培訓(xùn)試題及答案(全國(guó)通用)
- 2025小學(xué)道德與法治開(kāi)學(xué)第一課(思想政治理論教育課)
- 基于STM32Cube的嵌入式系統(tǒng)應(yīng)用 教案
- 江蘇省成人高等教育畢業(yè)生登記表
評(píng)論
0/150
提交評(píng)論