網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告doc_第1頁(yè)
網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告doc_第2頁(yè)
網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告doc_第3頁(yè)
網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告doc_第4頁(yè)
網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告doc_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《計(jì)算機(jī)網(wǎng)絡(luò)》課程設(shè)計(jì)報(bào)告 《計(jì)算機(jī)網(wǎng)絡(luò)》課程設(shè)計(jì)報(bào)告題目:簡(jiǎn)易聊天室姓名:學(xué)號(hào):班級(jí):?jiǎn)栴}描述和設(shè)計(jì)思想問題描述在網(wǎng)絡(luò)越來越便捷的今天,人們對(duì)網(wǎng)絡(luò)的依賴也越來越多,越來越離不開網(wǎng)絡(luò),由此而產(chǎn)生的聊天工具也越來越多,其中應(yīng)用比較廣泛的有Netmeeting、MSN-Messager、騰訊QQ,等等。此類軟件使得人們運(yùn)用連上Internet網(wǎng)的電腦用戶可以隨時(shí)跟另外一個(gè)在線網(wǎng)民交談,甚至可以通過視頻看到對(duì)方的適時(shí)圖像,互相討論。使得人們不需要聚集在同一地點(diǎn),不必?fù)?dān)心昂貴的話費(fèi)而暢快交流,工作、交流兩不誤。而且好的聊天室還有各種表情符號(hào)等可以加強(qiáng)我們的表達(dá)。而且費(fèi)用低廉,信息交流速度快,在這個(gè)涌動(dòng)的社會(huì)中加強(qiáng)聯(lián)系,創(chuàng)造出更多的財(cái)富。在此基于Java網(wǎng)絡(luò)編程的強(qiáng)大功能編寫一個(gè)簡(jiǎn)易聊天室系統(tǒng)。一般來說,聊天工具大多數(shù)由客戶端程序和服務(wù)器端程序組成,本系統(tǒng)采用客戶機(jī)/服務(wù)器架構(gòu)模式通過Java·提供的Socket類來連接客戶機(jī)和服務(wù)器并使客戶機(jī)和服務(wù)器之間相互通信,由于聊天是多點(diǎn)對(duì)多點(diǎn)的而Java提供的多線程功能用多線程可完成多點(diǎn)對(duì)多點(diǎn)的聊天。因此使用Java的異步通信功能,實(shí)現(xiàn)網(wǎng)絡(luò)通信的課程設(shè)計(jì)。功能要求:有一個(gè)聊天服務(wù)器,存儲(chǔ)帳戶信息;用戶向服務(wù)器發(fā)送含有賬戶名的消息,服務(wù)器接受連接后,將賬戶名及其IP、端口記錄下來,并刷新用戶的賬戶列表;服務(wù)器監(jiān)控聊天內(nèi)容;支持多人聊天,聊天時(shí)列出當(dāng)前所有在線的人員;客戶端之間可以單獨(dú)發(fā)送消息;支持圖片表情;保存用戶聊天信息;設(shè)計(jì)思想Java是一種簡(jiǎn)單的,面向?qū)ο蟮?,分布式的,解釋的,鍵壯的,安全的,結(jié)構(gòu)中立的,可移植的,性能很優(yōu)異的,多線程的,動(dòng)態(tài)的語言。Java的語言功能很精煉,并增加了一些很有用的功能,如自動(dòng)收集碎片。而且,Java很小,不需要占用多大內(nèi)存。因此運(yùn)用JAVA程序編寫聊天室,實(shí)現(xiàn)簡(jiǎn)單聊天功能。本次課程設(shè)計(jì)做的是Java簡(jiǎn)單聊天室,它是圖形界面、線程、流與文件等技術(shù)的綜合應(yīng)用。在Internet上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過客戶端程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶交談,這是一個(gè)面向連接的通信過程。因此,程序要在TCP/IP環(huán)境下,實(shí)現(xiàn)服務(wù)器端和客戶端兩部分程序。服務(wù)器端工作流程:服務(wù)器端通過系統(tǒng)調(diào)用創(chuàng)建一個(gè)ServerSocket與指定的本地端口綁定,就可以在端口進(jìn)行偵聽。如果有客戶端連接請(qǐng)求,則創(chuàng)建一個(gè)Socket,將客戶端地址賦給這個(gè)Socket。然后登錄成功的客戶就可以在服務(wù)器上聊天了??蛻舳斯ぷ髁鞒?客戶端程序相對(duì)簡(jiǎn)單,只需要建立一個(gè)Socket與服務(wù)器端連接,成功后通過這個(gè)Socket來發(fā)送和接收數(shù)據(jù)就可以了。Socket程序的工作過程:建立Socket連接:在通信開始之前由通信雙方確認(rèn)身份,建立一條專用的虛擬連接道。數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進(jìn)行通信。關(guān)閉:通信結(jié)束時(shí),再將所建的虛擬連接拆除。功能實(shí)現(xiàn)和系統(tǒng)結(jié)構(gòu)系統(tǒng)功能如下:服務(wù)器:端口設(shè)置:設(shè)置傾聽的端口號(hào),默認(rèn)為8888。啟動(dòng)服務(wù):開啟傾聽端口,允許客戶端連接。系統(tǒng)消息:服務(wù)器啟動(dòng)后可以在聊天室內(nèi)發(fā)送消息。停止服務(wù):關(guān)閉傾聽端口,中斷所有客戶端的連接。退出:關(guān)閉服務(wù)器。在特定端口上進(jìn)行偵聽,等待客戶端連接。用戶可以配置服務(wù)器端的偵聽端口,默認(rèn)端口為8888。向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。統(tǒng)計(jì)在線人數(shù)。當(dāng)停止服務(wù)時(shí),斷開所有的用戶連接。系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。一臺(tái)主機(jī)只能啟動(dòng)一個(gè)服務(wù)器??蛻舳耍河脩粼O(shè)置:設(shè)置聊天時(shí)顯示的名稱,默認(rèn)為匆匆過客。連接設(shè)置:設(shè)置要連接的服務(wù)器所在主機(jī)的IP地址和傾聽端口。登錄:連接服務(wù)器。發(fā)送消息:進(jìn)行聊天,可單獨(dú)發(fā)送消息給聊天室中的一個(gè)人。注銷:與服務(wù)器斷開連接。退出:關(guān)閉客戶端。連接到已經(jīng)開啟聊天服務(wù)的服務(wù)器端。用戶可以配置要連接的服務(wù)器端的IP地址和端口號(hào)。用戶可以配置連接后顯示的用戶名。用戶可以更改聊天時(shí)的表情。當(dāng)服務(wù)器端開啟后,用戶可以隨時(shí)登錄和注銷。用戶可以向所有人或某一個(gè)人發(fā)送消息。系統(tǒng)運(yùn)行穩(wěn)定、安全可靠??梢阅J(rèn)連接到自己主機(jī)啟動(dòng)的服務(wù)器。系統(tǒng)結(jié)構(gòu)如圖所示:否否是服務(wù)器serversocket監(jiān)聽建立與客戶端連接的套接字1.讀客戶端信息2.向客戶端轉(zhuǎn)發(fā)信息關(guān)閉服務(wù)器客戶端socket1.讀服務(wù)端信息2.向服務(wù)器寫信息關(guān)閉客戶端啟動(dòng)AppServer.java啟動(dòng)ChatClient.java登錄注冊(cè)是否注冊(cè)三、采用的主要技術(shù)、遇到的難點(diǎn)和解決方法主要技術(shù)操作系統(tǒng):Windowsxp開發(fā)工具:eclipse3.2及其VE插件開發(fā)工具:Eclipse使用GUI界面設(shè)計(jì)JavaSwing技術(shù)遇到的難點(diǎn)和解決難點(diǎn):表情信息的傳送解決:通過對(duì)發(fā)送消息進(jìn)行解析,提取出表情圖片的信息進(jìn)行順序輸出。四、核心代碼描述和相關(guān)技術(shù)說明本程序采用的是Javaswing圖形界面開發(fā)工具包來設(shè)計(jì)的,建立一個(gè)主類Client.java,然后在其構(gòu)造方法加載程序所需的組件,設(shè)置布局方式(采用的是Boxlayout布局管理器)。構(gòu)造方法如下:privatevoidinit(){ box=Box.createVerticalBox();//豎結(jié)構(gòu) Boxbox_1=Box.createHorizontalBox();//橫結(jié)構(gòu) Boxbox_2=Box.createHorizontalBox();//橫結(jié)構(gòu) Boxbox_3=Box.createHorizontalBox();//橫結(jié)構(gòu) box.add(box_1); box.add(Box.createVerticalStrut(8));//兩行的間距 box.add(box_2); box.add(Box.createVerticalStrut(8));//兩行的間距 box.add(box_2); box.add(Box.createVerticalStrut(8));//兩行的間距 box.add(box_3); box.setBorder(BorderFactory.createEmptyBorder(8,8,8,8));//8個(gè)的邊距 //開始將所需組件加入容器 box_1.add(newJLabel("字體:"));//加入標(biāo)簽 box_1.add(fontName);//加入組件 box_1.add(Box.createHorizontalStrut(8));//間距 box_1.add(newJLabel("樣式:")); box_1.add(fontStyle); box_1.add(Box.createHorizontalStrut(8)); box_1.add(newJLabel("字號(hào):")); box_1.add(fontSize); box_1.add(Box.createHorizontalStrut(8)); box_1.add(newJLabel("顏色:")); box_1.add(fontColor); box_1.add(Box.createHorizontalStrut(8)); box_1.add(newJLabel("背景:")); }/** *啟動(dòng)服務(wù)端 */ publicvoidstartService(){ try{ serverSocket=newServerSocket(port,10); messageShow.setCaretPosition(messageShow.getText().length());//獲取消息框字符串長(zhǎng)度 messageShow.replaceSelection("服務(wù)端已經(jīng)啟動(dòng),在"+port+"端口偵聽...\n");//在末尾添加消息 startServer.setEnabled(false); startItem.setEnabled(false); portSet.setEnabled(false); portItem.setEnabled(false); stopServer.setEnabled(true); stopItem.setEnabled(true); MessagePane.setEnabled(true); } catch(Exceptione){ System.out.println(e); } userLinkList=newUserLinkList(); listenThread=newServerListen(serverSocket,combobox,messageShow,showStatus,userLinkList); listenThread.start();//服務(wù)端的偵聽類啟動(dòng) }while(!socket.isClosed()){ try{ Stringtype=(String)input.readObject(); if(type.equalsIgnoreCase("系統(tǒng)信息")){ Stringsysmsg=(String)input.readObject(); String[]str=sysmsg.split("%"); textarea.setCaretPosition(textarea.getDocument() .getLength()); textarea.replaceSelection("系統(tǒng)信息:"); for(inti=0;i<str.length;i++){ Filefile=newFile("src/image/%"+str[i]+"%.gif"); if(file.exists()){ textarea.setCaretPosition(textarea.getDocument() .getLength()); textarea.insertIcon(newImageIcon(getClass() .getResource("/image/%"+str[i]+"%.gif"))); }else{ textarea.setCaretPosition(textarea.getDocument() .getLength()); textarea.replaceSelection(str[i]); } } } }catch(Exceptione){System.out.println(e); } } publicvoidsendToAll(Stringmsg,Stringname){ intcount=userLinkList.getCount(); inti=0; while(i<count){ Nodenode=userLinkList.findUser(i); if(node==null){ i++; continue; } try{ node.output.writeObject("聊天信息"); node.output.flush(); node.output.writeObject(name+"群發(fā):"+msg); node.output.flush(); }catch(Exceptione){ //System.out.println(e); } i++; } }五、總結(jié)和體會(huì)Config讀取相應(yīng)的鍵對(duì)應(yīng)信息。實(shí)現(xiàn)簡(jiǎn)單的窗口界面的輸出。其次是通過在這些類當(dāng)中添加事件處理,如用戶名是否錯(cuò)誤,密碼是否在規(guī)定范圍之內(nèi);客戶端與服務(wù)器之間的信息傳輸實(shí)現(xiàn),實(shí)現(xiàn)對(duì)按鈕的監(jiān)聽實(shí)現(xiàn)系統(tǒng)中群消息的發(fā)送。最后,通過運(yùn)行服務(wù)器和登錄窗口,注冊(cè)一個(gè)用戶名實(shí)現(xiàn)用戶與服務(wù)器的鏈接,就可進(jìn)行在聊天室中聊天,實(shí)現(xiàn)聊天室功能。體會(huì):在這個(gè)課程設(shè)計(jì)中讓我體會(huì)到一個(gè)簡(jiǎn)單的聊天系統(tǒng)也不是那么好實(shí)現(xiàn)的,只是簡(jiǎn)單窗口的實(shí)現(xiàn)也要花費(fèi)一天半時(shí)間,然后通過用戶窗口之間添加對(duì)事件的處理監(jiān)聽器接口鏈接最終實(shí)現(xiàn)簡(jiǎn)單聊天系統(tǒng)。本系統(tǒng)能實(shí)現(xiàn)在客戶端用戶聊天窗口中顯示用戶名昵稱和頭像,服務(wù)器端口能看見當(dāng)前用戶在線狀態(tài)并顯示用戶名和昵稱。實(shí)現(xiàn)多個(gè)用戶之間在線信息的發(fā)送;服務(wù)器能監(jiān)測(cè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論