




免費(fèi)預(yù)覽已結(jié)束,剩余9頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
計算機(jī)科學(xué)與技術(shù)系課程設(shè)計報告20132014學(xué)年第一學(xué)期課程Java語言程序設(shè)計課程設(shè)計名稱 多人聊天程序?qū)I(yè)班級10計本(2)班姓名* 指導(dǎo)教師*2013年10月11號一、需求分析聊天工具大多數(shù)由客戶端程序和服務(wù)器程序外加服務(wù)器端,本程序采用客戶機(jī)/服務(wù)器架構(gòu)模式。通過Java提供的Socket類來連接客戶機(jī)和服務(wù)器并使客戶機(jī)和服務(wù)器之間相互通信,由于聊天是多點(diǎn)對多點(diǎn)的而Java提供的多線程功能。用多線程可完成多點(diǎn)對多點(diǎn)的聊天。主要有兩個應(yīng)用程序,分別為服務(wù)器程序和客戶端程序。服務(wù)器應(yīng)用程序主要用于消息轉(zhuǎn)發(fā),以及向所有用戶發(fā)送系統(tǒng)消息等;客戶端應(yīng)用程序主要用于客戶聊天記錄的顯示和信息輸入。采用Client/Server(C/S)體系結(jié)構(gòu),即客戶機(jī)/服務(wù)器體系結(jié)構(gòu)。聊天服務(wù)器專門用于監(jiān)控用戶狀態(tài)和轉(zhuǎn)發(fā)消息,客戶端負(fù)責(zé)接收消息的用戶序列和消息文本發(fā)送到服務(wù)器。該聊天系統(tǒng)實現(xiàn)私聊,群聊,用戶登陸,退出聊天系統(tǒng)等功能。二. 設(shè)計1設(shè)計思想: 課程設(shè)計中利用JAVA實現(xiàn)基于C/S模式的聊天程序。聊天室共分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負(fù)責(zé)偵聽客戶發(fā)來的消息,客戶端登錄到服務(wù)器端才可以實現(xiàn)正常的聊天功能。2功能設(shè)計 (1)服務(wù)器端的主要功能如下。 在特定端口上進(jìn)行偵聽,等待客戶端連接。用戶可以配置服務(wù)端的偵聽端口,默認(rèn)端口為8888. 向已經(jīng)連接到服務(wù)端的用戶發(fā)送系統(tǒng)消息。 統(tǒng)計在線人數(shù)。當(dāng)停止服務(wù)時,斷開所有用戶連接。 (2)客戶端的主要功能如下。 連接到已經(jīng)開啟聊天服務(wù)的服務(wù)端。 用戶可以配置到連接服務(wù)器的IP地址和端口號。 用戶可以配置連接后顯示的用戶名。 當(dāng)服務(wù)器端開啟的話,用戶可以隨時登錄與注銷。 用戶可以向所有人或者某一個人發(fā)送消息。3詳細(xì)設(shè)計 聊天室服務(wù)器端設(shè)計 聊天室服務(wù)器主要包括7個文件,他們功能如下。 (1)ChatServer.java包含名為ChatServer的public類,其主要功能為定義服務(wù)器端的界面,添加事件偵聽與事件處理。調(diào)用ServerListen 類來實現(xiàn)服務(wù)端用戶上線與下線偵聽,調(diào)用ServerReceive類來實現(xiàn)服務(wù)器端的消息收發(fā)。(2)ServerListen.java該類實現(xiàn)服務(wù)端用戶上線與下線的偵聽。該類對用戶上線下線的偵聽通過調(diào)用用戶鏈表來實現(xiàn),當(dāng)用戶上線與下線情況發(fā)生的時候,該類會對主類的界面進(jìn)行相應(yīng)的修改。(3)ServerReceive.java該類是實現(xiàn)服務(wù)器消息收發(fā)的類,該類分別定義了向某用戶及所有人發(fā)送消息的方法,發(fā)送消息會顯示在主界面類的界面上。(4)Portconf.java該類繼承自JDialog,是用戶對服務(wù)器端偵聽端口進(jìn)行配置的的類。(5)Node.java 用戶鏈表的節(jié)點(diǎn)類,定義了鏈表中的用戶。(6)UserLinkList.java 用戶鏈表節(jié)點(diǎn)的具體實現(xiàn)類,該類通過構(gòu)造函數(shù)構(gòu)造用戶鏈表,定義了添加用戶、刪除用戶、返回用戶數(shù)、根據(jù)用戶名查找用戶、根據(jù)索引查找用戶這五個方法。(7)Help.java 服務(wù)器端的幫助類。聊天室客戶端設(shè)計聊天室客戶端主要包括5個文件,他們的功能如下。(1)Chatclient.java 包含名為 Chatclient的Public類,其主要功能為定義客戶端的界面,添加事件偵聽與事件處理。該類定義了Connect()與Disconnect()方法實現(xiàn)與服務(wù)器連接與斷開連接。當(dāng)SendMessege()方法來向其他用戶發(fā)送帶有表情的消息或者悄悄話。(2)ClientReceive.java該類是實現(xiàn)服務(wù)器端與客戶端消息收發(fā)的類。(3)ConnectConf.java該類繼承自Jdialog,是用戶所要連接的服務(wù)器IP及偵聽端口進(jìn)行修改配置的類。(4)UserConf.java該類繼承自Jdialog,是用戶對連接到服務(wù)器時所顯示的用戶名進(jìn)行修改配置的類。(5)Help.java 客戶端程序的幫助類。三. 調(diào)試及測試1、調(diào)試過程中遇到的主要問題及解決方法程序中主要問題為:(1)套接字的通信問題網(wǎng)絡(luò)上兩個程序通過一個雙向的通信鏈接實現(xiàn)數(shù)據(jù)交換,每一端都建立一個Socket,通過對Socket的讀寫操作實現(xiàn)網(wǎng)絡(luò)的通信功能。Socket通信程序的基本結(jié)構(gòu)的基本結(jié)構(gòu)主要有創(chuàng)建Socket、打開連接到Socket的輸入流和輸出流、按照一定的協(xié)議對Socket進(jìn)行讀寫操作、關(guān)閉Socket這四個步驟。為了完成Socket通信, 包中提供了Socket 和ServerSocket這兩個類,他們分別用來表示雙向連接的客戶端和服務(wù)器。構(gòu)造函數(shù)如下:Socket(Inetaddress address,int port)Socket (Inetaddress address, int port, Boolean stream)Socket (String host ,int port)Socket (String host ,int port, Boolean stream)ServerSocket (int port)ServerSocket ( int port, int count)通信模型中首先在客戶機(jī)和服務(wù)器之間定義一套通信協(xié)議,并創(chuàng)立一個Socket類,利用這個類建立一條可靠的鏈接;客戶端發(fā)出請求,服務(wù)器端監(jiān)聽來自客戶機(jī)的請求,并為客戶端提供響應(yīng)服務(wù)。要是實現(xiàn)套接字的服務(wù)器端,要使用SocketServer類。它允許程序綁定一個端口等待客戶端的請求,一旦產(chǎn)生客戶端請求,它將接受這一請求,同時產(chǎn)生一個完整的Socket連接對象。服務(wù)器綁定端口必須公開,以便讓客戶端程序知道如何連接這個服務(wù)器。同時作為服務(wù)器,它必須能夠接受多個客戶的請求,這就需要為服務(wù)器設(shè)置一個請求隊列。由于存在單個服器與多個客戶程序通信,所以服務(wù)程序響應(yīng)客戶程序不應(yīng)花很多時間,否則客戶程序在得到服務(wù)前有可能花很多時間來等待通信的建立,然而服務(wù)程序和客戶程序的會話可能很長,因此為加快對客戶程序連接請求的響應(yīng),典型的方法是服務(wù)器主機(jī)運(yùn)行一個后臺線程,這個后臺線程處理服務(wù)程序和客戶程序的通信。(2)數(shù)據(jù)報通信問題 Java通過DatagramPacket和DatagramSocket兩個類來實現(xiàn)UDP協(xié)議頂層的數(shù)據(jù)報。DatagramPacket生成的對象表示一個數(shù)據(jù)報,而DatagramSocket是用來發(fā)送和接受數(shù)據(jù)包的類。生成DatagramPacket對象可以通過四個構(gòu)造函數(shù):DatagramPacket( byte data ,int size )DatagramPacket( byte data ,int offset, int size)DatagramPacket( byte data ,int size, InetAddress ipAddress, int port )DatagramPacket( byte data , int offset, int size, InetAddress ipAddress, int port)對于DatagramPacket內(nèi)部狀態(tài),可以使用如下方法獲得:InetAddress getAddress()返回目標(biāo)文件InetAddress,一般用于發(fā)送。int getPort()返回端口號。byte getData()返回包含在數(shù)據(jù)包中的字節(jié)數(shù)組數(shù)據(jù)。 int getLength() 返回包含在將從getData()方法中返回字節(jié)數(shù)組的有效數(shù)據(jù)長度。DatagramSocket類用來發(fā)送和結(jié)束數(shù)據(jù)包。需要首先建立DatagramSocket對象來接收或發(fā)送數(shù)據(jù)報,然后使用DatagramPacket類對象作為傳輸數(shù)據(jù)的載體。DatagramSocket類常用的構(gòu)造函數(shù): DatagramSocket() DatagramSocket(int port) DatagramSocket(int port,InetAddress ipAddress)DatagramSocket接收數(shù)據(jù)報要用receive(DatagramSocket p)方法,而發(fā)送數(shù)據(jù)報則使用send(DatagramSocket p)方法。要發(fā)送一個數(shù)據(jù)報首先要創(chuàng)建一個DatagramPacket,指定要發(fā)送的數(shù)據(jù)、數(shù)據(jù)長度、數(shù)據(jù)要發(fā)送到哪個主機(jī)和端口,然后在用DatagramSocket的send()方法發(fā)送數(shù)據(jù)包;接收一個數(shù)據(jù)報必須創(chuàng)建一個在本地主機(jī)的特定端口上偵聽的DatagramSocket,此套接字只能接收發(fā)送至特定端口上的數(shù)據(jù)包。2、對設(shè)計和編碼的回顧討論和分析在本程序中,用戶的存儲時通過鏈表來實現(xiàn)的。用了UserLinkList定義了鏈表及其操作,Node定義了用戶鏈表節(jié)點(diǎn)。用戶鏈表的結(jié)點(diǎn)類:public class Node String username = null;Socket socket = null;ObjectOutputStream output = null;ObjectInputStream input = null;Node next = null;用戶鏈表public class UserLinkList Node root;Node pointer;int count;構(gòu)造用戶鏈表public UserLinkList()root = new Node();root.next = null;pointer = null;count = 0;添加用戶public void addUser(Node n)刪除用戶public void delUser(Node n)返回用戶數(shù)public int getCount()根據(jù)用戶名查找用戶public Node findUser(String username)根據(jù)索引查找用戶public Node findUser(int index)3、程序運(yùn)行的時空效率分析本程序應(yīng)用了線程對端口進(jìn)行偵聽。線程一直后臺開啟,長期占用系統(tǒng)資源,但又能及時的實現(xiàn)端口監(jiān)聽和消息的收發(fā)。4、測試數(shù)據(jù)集服務(wù)器端程序主界面:服務(wù)器偵聽端口的配置:服務(wù)器端幫助窗口:服務(wù)器端啟動時的界面:確認(rèn)停止服務(wù)器:客戶端用戶名配置界面:客戶端幫助界面:客戶端程序運(yùn)行主界面:四、經(jīng)驗和體會。經(jīng)過一個學(xué)期的JAVA課程學(xué)習(xí)了解了JAVA的基礎(chǔ)理論知識,通過這次程序設(shè)計,進(jìn)一步鞏固、加深了我們所學(xué)專業(yè)課程的基本理論知識,理論聯(lián)系實際,進(jìn)一步培養(yǎng)了綜合分析問題,解決問題的能力,進(jìn)一步加強(qiáng)了JAVA的實際應(yīng)用能力。通過本次Java語言課程設(shè)計,我對面向?qū)ο蟮某绦蛟O(shè)計有了更深程度的掌握,它將重點(diǎn)放在對象與對象的接口上。在通過對題目進(jìn)行需求分析,考慮一些編程中可能遇到的問題。其次開始界面設(shè)計、類的設(shè)計、類功能的連接等等實現(xiàn)。在遇到問題解決問題的過程中不斷完善功能。同時在老師和同學(xué)的幫助下,不斷完善自己的成果,不斷改進(jìn),不斷進(jìn)步。這次Java課程設(shè)計不僅考查了對Java語言基
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年丹東鳳城市公立醫(yī)院普通高校招聘考試真題
- 2025至2030豪華嬰兒服裝行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報告
- 2019-2025年中國草種市場運(yùn)行態(tài)勢及行業(yè)發(fā)展前景預(yù)測報告
- 河南省商務(wù)廳事業(yè)單位真題2024
- 2025至2030釣魚船產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報告
- 關(guān)于一部書目的讀后感11篇
- 人民的利益高于一切800字7篇范文
- 基于核心素養(yǎng)的學(xué)前繪本教學(xué)行動研究
- 任務(wù)導(dǎo)向訓(xùn)練聯(lián)合體感游戲?qū)θ毖阅X卒中患者ADL的應(yīng)用研究
- 典型氯化鈉型工業(yè)廢鹽回轉(zhuǎn)窯熱處置過程有機(jī)物脫除試驗研究
- 行業(yè)特定市場調(diào)研方法與技巧分享
- 2025年高考數(shù)學(xué)全國二卷試題真題解讀及答案詳解
- 2025山煤國際井下操作技能人員招聘150人(山西)筆試參考題庫附帶答案詳解析集合
- 安全月培訓(xùn)試題及答案
- 2025至2030中國4K和8K超高清電視行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 大骨節(jié)考試題及答案
- 消防在建工地課件
- 南海課件下載
- 彩鋼板圍擋施工與拆除一體化服務(wù)協(xié)議
- 中班安全標(biāo)識課件
- CSCO惡性血液病診療指南(2025)解讀
評論
0/150
提交評論