java實現(xiàn)聊天系統(tǒng)_第1頁
java實現(xiàn)聊天系統(tǒng)_第2頁
java實現(xiàn)聊天系統(tǒng)_第3頁
java實現(xiàn)聊天系統(tǒng)_第4頁
java實現(xiàn)聊天系統(tǒng)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機網(wǎng)絡課程設計報告學生姓名學號班級指導教師設計時間目錄第一章系統(tǒng)描述設計目的 3系統(tǒng)設計任務 3系統(tǒng)設計分析 3系統(tǒng)功能分析 4第二章功能模塊結構模塊劃分 5模塊結構圖 5模塊功能 5第三章模塊算法實現(xiàn)服務器實現(xiàn) 6客戶端實現(xiàn) 9第四章運行結果 13第五章課程設計總結 17第六章附錄參考文獻 19源代碼 19第一章系統(tǒng)描述設計目的1 .學習網(wǎng)絡編程的知識,掌握網(wǎng)絡編程的方法。2 .進一步掌握編程思想與編程技巧,做到模塊化程序設計,3 .強化語言學習,尤其是Java的圖形界面與多線程,需反復練習,熟練 掌握。系統(tǒng)設計任務聊天室軟件的設計與開發(fā):基本要求可以完成群聊、私人聊天,實時發(fā)送和 顯示

2、聊天信息,完成好友列表;進一步要求帶表情,附件發(fā)送,聊天信息的加密 傳送,設置黑名單等。學習通信編程Socket接口編程,使用TCP或UD臉口完成信息傳送,利用 多線程技術實現(xiàn)服務器端的多個TCP!接的建立。系統(tǒng)設計分析一 .實現(xiàn)網(wǎng)絡聊天室編程,關鍵在于Socket通信,程序的功能都是在Socket 的基礎上一層一層增加的。實現(xiàn) Socket通信的基本方法為以下4個步驟。(1) 在客戶端與服務器端創(chuàng)建相應的 ServerSockot/Socket 實例。(2)打開連接到Socket的輸入輸出流(3)利用輸入輸出流,按照一定的協(xié)議(TCPB議)對Socket進行讀寫 操作(4)關閉輸入輸出流和S

3、ocket我們要實現(xiàn)的功能都是在第3步對Socket的輸入輸出流做相應的操作二.因為是多客戶端,所以必須用線程進行控制,不同的處理線程為不同的客 戶服務,主線程只負責循環(huán)等待,處理線程負責網(wǎng)絡連接,接受客戶輸入的信息 再做相應的處理。系統(tǒng)功能分析本系統(tǒng)可以通過網(wǎng)絡進行聊天,采用客戶端服務器模式,所以程序簡介 清晰易懂,而且用戶都是在客戶端進行活動,方便對用戶的管理,也使得程 序運行與差錯簡單起來。采用了多線程技術,可以做到多人同時在線,提高 了系統(tǒng)的性能,增強了系統(tǒng)的實用性。有簡單的客戶端界面,方便用戶使用 采用的是TCP議,這是可靠的,穩(wěn)定的協(xié)議,這樣不會丟失任何包,也就 不會丟失任何信息。

4、本系統(tǒng)實現(xiàn)的功能有:1 .用戶名字登錄2 .用戶之間的群聊3 .用戶之間的私聊4 .動態(tài)刷新并顯小好友列表5 .顯示在線人數(shù)6 .服務器可以顯示用戶在線狀態(tài)7 .能夠退出處理8 .用戶上下線提醒第二章功能模塊結構模塊劃分服務器:Server類模塊,ServerHanderson模塊sendallclient 模塊,sendclientlist模塊客戶端:Client類模塊,ServiceFrame 窗口界面模塊模塊功能服務器:1. Server類模塊:與客戶端建立連接,通過套接字獲得名字,在控制端 顯示提示信息2. ServerHander模塊:提供線程管理,實現(xiàn)多用戶的管理。針對每一個 用戶

5、發(fā)過來的消息,進行相應處理,再轉發(fā)給客戶。3. Sendallclient 模塊:給每個用戶發(fā)送消息。4. Sendclientlist 模塊:每當有用戶上線,更新每個用戶的用戶列表。客戶端:1. Client類模塊:與服務端建立連接,用戶登錄,實現(xiàn)消息的群聊,私 聊,用戶列表的更新等功能。2. ServiceFrame窗口界面模塊:客戶端窗口界面,實現(xiàn)用戶友好,方便用戶使用,在窗口上有消息顯示,用戶列表,在線人數(shù)等視圖信息。第三章模塊算法實現(xiàn)服務器實現(xiàn)1. Server類模塊:創(chuàng)建ServerSocket,在指定端口監(jiān)聽,當有用戶登錄, 接受套接字輸入流,顯示其登錄信息,調(diào)用 ServerH

6、ander線程進行管理。 public Server( int port) throws IOException ServerSocket server= newServerSocket(port); while (true )Socket conn=();Sendallclient 模塊:把 msg消息發(fā)送給每一個用戶。其中allclients 是ServerHander的枚舉類型,可以指向每一個 用戶。 protected static void sendallclient(String msg) synchronized ( clientlist ) Enumeration <Se

7、rverHander> allclients=(); while () ServerHander serh=(ServerHander)(); try catch (IOException exc) (); 模塊:更新用戶列表,當有新用戶上線時,對以前的用戶的好友列表,加上這 個新用戶名字,對于這個新用戶,加上所有用戶的名字。實現(xiàn)方法是在名字信息 后面加上“ $”關鍵字,這樣客戶端接收到這個關鍵字時,做相應處理。public static synchronized void sendclientlist()for (int j=0;j<();j+) 務器控制臺顯示ServerHan

8、der allclients1=(j);if (j=()-1)rim();并記錄登錄,退出信息。bervtr IJjvjApplication U;yog爐m 卬氣,slip6如ClierttLp:/)!Clientfip:/)ESI匚 liunt(ip:"2九目.1)王五善 YClient (ip: /127.0.0.errorm«nt(lp: /137- 0.0.1 )«A M!errorClientfip: /127力.酊1)王五浴取Client Java Application D:Program Files司重上一J凈

9、于二2 .在客戶端控制臺輸入名字進入聊天室Client Java Application D:Program Fi三黠Af看學2=-3 .聊天界面顯示客戶端名字,好友列表,在線人數(shù)等信息國寧翔的客戶黃c亙區(qū)翔三四五六六五寧張李王越越王-2 -J2 45上上上上上-寧翔對所有人 說:大冢好,我是寧翔發(fā)送在線人數(shù):34 .私聊,群聊顯示,若選擇所有人則為群聊,選擇某一個人,則為私聊。如下圖,群聊消息,在所有客戶端都顯示,私聊信息只會在發(fā)送者與接受者中顯 示。亙回叵寧理的客戶方上上上上翔三四五寧張李王一趙六一王五-寧翔-寧翔-寧翔下線下線對所有人對張三對李四說:大冢好,我是寧翔說:張三,你好說:李四

10、,你好發(fā)法在線人數(shù):3:圉張三的春白乒-張三上線李四上線-王五上線-趙六上線一趙六下線-王五下線-寧翔對所有人 說.大家好,我是寧翔-寧翔時瞇三說:瞇三,你好所有人發(fā)誨在線人熟:35.人數(shù)動態(tài)刷新國££1U PG ibh?Pr'-J=-q- J I、-4" 一 .1 一£L NN"空1 kE 上上上上上楨橙 翔三四五六六五期ffl翔喜 于張攣王甑曲王寧寧寧白 _對所有人說大冢好,我是寧到 對我三說:張三,你擰 對李四說:李四,你好上線李四在線人數(shù)固臏送第五章課程設計總結從收到題目的茫然無措,不知從何下手,到最后交出的成果,真的讓我 學到

11、了很多,可能比一學期的 JAVA和網(wǎng)絡課程設計中學到的關于 TCPB議的知 識還要多,所以很感謝這次課程設計,有效果也很有意義,某種程度上比上課效 果還好。說說完成課程設計的整個過程吧。剛看到可以選擇的六個題目時,猶如 晴天霹靂,別說用代碼實現(xiàn)了,連題目要求都不理解,上課恍惚聽老師提到過這 個知識點,可是重要的內(nèi)容卻一點也不知道,而且,由于要做圖形界面,所以用 JAVA會更簡單點,但JAVA也忘得差不多了,所以只能從頭來過,剛開始的3周, 一點有關課程設計的代碼都沒寫,拿著一本從零開始學 JAVA把JAVA基礎知 識,尤其是關于網(wǎng)絡編程,線程,圖形界面的知識,狠狠地補了一把,終于更看 懂一些程

12、序結構清晰,沒有反射,泛型等高端用法的程序了。在這過程中發(fā)現(xiàn), 做一個普通的網(wǎng)絡聊天室,似乎不要用太多網(wǎng)絡知識,懂得Socokt和TCP的使用即可,于是開始慢慢敲代碼了。先把服務器與客戶端搭建起來,只能實現(xiàn)連接上的作用,但什么功能都 沒有,那時,以為能連接上了,那實現(xiàn)一些私聊,群聊的功能應該很簡單,但現(xiàn) 實確是,只能腦中想象,真的用代碼實現(xiàn),卻總是錯誤百出,做的心灰意冷,尤 其是私聊功能的實現(xiàn),剛開始,想讓服務器直接向接受者與發(fā)送者發(fā)送消息,但總是不如人意,折騰了大概一星期,才意識到TCP議就是用自己定義的一些規(guī) 則,在服務器與客戶端之間傳遞消息,可以添加關鍵字,再解析。于是才解決私 聊問題,

13、然后添加好友列表與更新好友的功能也在跌跌撞撞中實現(xiàn)了。窗口的布局,剛開始想用網(wǎng)格包布局,但用的很不熟練,導致布局不理想,無奈,只能用 最基本的布局了,所以界面看上去很普通。想發(fā)送圖片,卻發(fā)現(xiàn)文本區(qū)域根本不 能顯示圖片,能用JEditorPane實現(xiàn),但有BUG不知如何調(diào)試,書上,網(wǎng)上也 沒找到能解決的辦法,只能放棄了。課程設計在這種不斷學習與摸索中差不多完成了,說說這次課程設計的 不足吧。1. 學過的知識不牢固,所以花費了大量時間用來學習基礎知識,那些應該在以前就掌握的。2. 程序界面很普通,像老師說的一樣,是最最古老的聊天系統(tǒng),沒有什么花哨。3. 沒能實現(xiàn)附加功能,像加密傳輸,文件傳送等功能

14、。其實,挺遺憾的,因為以前選修過密碼學,應該能夠實現(xiàn)簡單的DE劭口密的。4. 沒有用到JDBC把用戶信息存儲到數(shù)據(jù)庫表中,實行賬號密碼登錄, 提高系統(tǒng)的安全性。做了這么多的課程設計,最大的體會就是用心去做,用心去學,你一定能 學到很多知識,而且這是對學過的知識的應用,所以比單一的上課更有意思。對于自己能獨立的完成課程設計,還是頗為滿意的,至少努力沒有白費,學到的知識也非常多,最重要的應該是理解了 TCP議的原理,并學會了簡單的 應用,JAVA編程水平得到了一定的提高,面向對象的思想比以往更清晰了。第六章附錄參考文獻從零開始學JAVA 王發(fā)波 中國鐵道出版社Java 2實用教程 耿祥文清華大學出

15、版社源代碼服務器代碼:package service;import .*;import .*;import .*;public class Server public Server( int port)throws IOExceptionServerSocket server=newServerSocket(port);while (true ) Socket conn=();import .*;import .*;import .*;public class Client public ServiceFrame sf ;private Socket csocket ;private Data

16、InputStream in ;private DataOutputStream out;public static void main(String 口args)BufferedReader in = new BufferedReader( new InputStreamReader);"請輸入一個名字:");String who= "" try who=().trim();/控制臺獲得名字catch (IOException e) ();new Client(who, "" ,9992);public Client(String

17、who,String server,int port)sf=new ServiceFrame(who+ "的客戶端");String str1 = null ;ActListener( this , sf);(new ExitListener( this );try csocket = new Socket(server,port);in =new DataInputStream( new BufferedInputStream();out =new DataOutputStream( new BufferedOutputStream(); (who);();/名字發(fā)給服務

18、器while (true )str1 =(); 重點! !,服務器端發(fā)來的消息if ("$")/若以$結尾,則增添用戶int index = ("$");String str2 = (0,index);else if ("")/以吉尾為私聊信息str1=(0,()-1); if (who) "-"+str1+ "n"); else if ("下線”)/用戶下線,刪除此用戶int index =("下線"); String str2 = (0,index);+str1

19、+ "n");"在線人數(shù):"+ /動態(tài)更新在線人數(shù)catch (Exception e)"Server Error" );();(0);protected void send(String msg)/發(fā)送消息給服務器的方法try (msg);();catch (Exception e)protected void close() try ();();();(); catch (IOException ex)class ServiceFrame extends FrameJTextArea showATJTextField sendFD;JComboBox friendlist ;JButton but;JLabel showCount;JScrollPane textAreaScrollPane ;JPanel textFieldPanel = new JPanel();public ServiceFrame (String winname) super (winname);/繼承父類的名字setSize(500,400);(new FlowLayout(0,10,10);showAT = new JTextArea(400,400);(false );textAr

溫馨提示

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

評論

0/150

提交評論