基于Socket網(wǎng)絡(luò)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
基于Socket網(wǎng)絡(luò)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
基于Socket網(wǎng)絡(luò)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
基于Socket網(wǎng)絡(luò)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!摘要隨著 Internet的飛速開展,網(wǎng)絡(luò)聊天以其操作簡(jiǎn)單、方便快捷、私密性好等優(yōu)點(diǎn)已經(jīng)迅速開展成為最普遍的網(wǎng)絡(luò)交流方式之一,越來越受到人們的青睞,豐富了人們的網(wǎng)上生活。 開發(fā)并實(shí)現(xiàn)具有自身特色的網(wǎng)絡(luò)聊天系統(tǒng)具有實(shí)際應(yīng)用價(jià)值。本網(wǎng)絡(luò)聊天系統(tǒng)基于Java 應(yīng)用程序設(shè)計(jì),以Client/Server 為開發(fā)模式,以Eclipse為開發(fā)環(huán)境,以 MySQL 為后臺(tái)數(shù)據(jù)庫,利用JDBC 連接數(shù)據(jù)庫。系統(tǒng)主要包括效勞器模塊和客戶端模塊, 效勞器模塊能夠?qū)蛻舳税l(fā)來的用戶信息進(jìn)展匹配、讀取和轉(zhuǎn)發(fā);客戶端模塊能夠進(jìn)展注冊(cè)、登錄、聊天和文件傳輸。系統(tǒng)不但實(shí)現(xiàn)了點(diǎn)到點(diǎn)的聊天

2、,還利用Java提供的 Socket類和多線程功能,在單個(gè)程序中同時(shí)運(yùn)行多個(gè)不同進(jìn)程,從而實(shí)現(xiàn)多點(diǎn)對(duì)多點(diǎn)的聊天??傊?,該聊天系統(tǒng)具有開放性,實(shí)時(shí)性,多話題交織等特點(diǎn),方便了人們網(wǎng)上交流。【關(guān)鍵詞 】網(wǎng)絡(luò)聊天效勞器模塊客戶端模塊Socket 頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!ABSTRACT With the rapid development of Internet, network chat with its simple operation, convenient and gond privacy has quickly become the most popular way of c

3、ommunication networks, more and more people like it, enrich peoples online lives. Development and Realization of the network chat system with its own characteristics and has practical application value. The Internet chat system is based on Java application, designed by Client / Server as the develop

4、ment of models, as Eclipse development environment, MySQL as the backend database, and using JDBC to connect database. The system includes server modules and client modules, server module can match users data, read and forward the information which is sent by client; client module to regist, login,

5、chat and file transfer. The system not only achieves peer-to-peer chat, but also use the Java provids Socket class and multi-threading capabilities, in a single program run different processes at the same time, in order to achieve multipoint chat. In short, the chat system is open, real-time and mul

6、ti-topic staggered features, easy for people to communicate online. 【Key words】Network Chat Client Module Server Module Socket 頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!目錄前言. 1 第一章系統(tǒng)開發(fā)工具簡(jiǎn)介 . 2 第一節(jié) 客戶機(jī) / 效勞器模型 . 2 第二節(jié) JAVA 簡(jiǎn)介 . 3 第三節(jié) Socket簡(jiǎn)介 . 3 第四節(jié) Eclipse簡(jiǎn)介 . 7 第五節(jié) MySQL 簡(jiǎn)介 . 8 本章小結(jié) . 9 第二章系統(tǒng)分析 . 10 第一節(jié) 可行性分析 . 10 第二節(jié) 業(yè)

7、務(wù)流分析 . 11 第三節(jié) 需求分析 . 11 一、系統(tǒng)設(shè)計(jì)目標(biāo) . 11 二、系統(tǒng)功能需求 . 12 本章小結(jié) . 13 第三章系統(tǒng)概要設(shè)計(jì) . 14 第一節(jié) 系統(tǒng)總體描述 . 14 第二節(jié) 模塊設(shè)計(jì) . 15 第三節(jié) 數(shù)據(jù)庫設(shè)計(jì) . 16 一、 設(shè)計(jì)原那么 . 16 二、 具體步驟 . 17 本章小結(jié) . 18 第四章系統(tǒng)實(shí)現(xiàn) . 20 第一節(jié) 數(shù)據(jù)庫模塊實(shí)現(xiàn) . 20 一、 數(shù)據(jù)流圖 . 20 二、數(shù)據(jù)庫的連接 . 20 第二節(jié) 注冊(cè)模塊實(shí)現(xiàn) . 21 第三節(jié) 登錄模塊實(shí)現(xiàn) . 23 第四節(jié) 聊天模塊實(shí)現(xiàn) . 24 第五節(jié) 文件傳輸模塊實(shí)現(xiàn) . 25 本章小結(jié) . 27 第五章系統(tǒng)測(cè)試

8、. 28 頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!第一節(jié) 效勞器模塊測(cè)試 . 28 第二節(jié) 注冊(cè)模塊測(cè)試 . 29 第三節(jié) 登錄模塊測(cè)試 . 30 第四節(jié) 聊天模塊測(cè)試 . 31 第五節(jié) 文件傳輸模塊測(cè)試 . 32 本章小結(jié) . 34 總結(jié).錯(cuò)誤!未定義書簽。致謝.錯(cuò)誤!未定義書簽。參考文獻(xiàn) .錯(cuò)誤!未定義書簽。附錄. 37 一、英文原文 . 37 二、英文翻譯 . 40 頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!前言隨著互聯(lián)網(wǎng)的快速開展, 網(wǎng)絡(luò)聊天軟件以它的實(shí)時(shí)性、 高效率和低本錢的特質(zhì)充當(dāng)了信息交流的媒介, 并逐漸成為網(wǎng)絡(luò)商圈和生活商圈中不可或缺的組成局部1。網(wǎng)絡(luò)聊天工具實(shí)現(xiàn)了“溝通無極限,它打

9、破了辦公室里上級(jí)與下級(jí)直接的等級(jí)限制, 也打破了長(zhǎng)輩與晚輩之間的時(shí)間限制,也打破了異地之間的距離限制。同時(shí)人們對(duì)于網(wǎng)絡(luò)聊天工具的友好的界面和快捷的操作方式也越來越高。大家都知道, 網(wǎng)絡(luò)上最常用的交流工具是騰訊QQ,QQ 來源于 OICQopen icq ,ICQ 是“I seek you的簡(jiǎn)稱,是“我找你的意思。QQ 引用了 ICQ 的功能即即時(shí)通信, 我們只要將對(duì)方加為好友, 不管對(duì)方是否在線, 我們都可以向?qū)Ψ桨l(fā)送信息, 無論對(duì)方在哪里, 只要登陸 QQ,他就能夠看到我們給他發(fā)的信息,我們就能夠隨時(shí)隨地的和對(duì)方進(jìn)展信息交流2。隨著網(wǎng)絡(luò)聊天工具的不斷完善, 它的功能越來越多樣化, 由最初的文

10、字交流開展成現(xiàn)在的視頻、 語音交流, 同時(shí)也提供了文件的發(fā)送和共享功能。其中不難發(fā)現(xiàn),現(xiàn)在的網(wǎng)絡(luò)聊天已經(jīng)不再是一個(gè)簡(jiǎn)單的溝通工具,而是一個(gè)信息資訊、 交流互動(dòng)、娛樂的工具。隨著技術(shù)的開展,網(wǎng)絡(luò)聊天工具具有即時(shí)性、高效性、平安性、功能上較強(qiáng)的延展性,能夠提供方便、快捷的交流34。本系統(tǒng)主要分析了網(wǎng)絡(luò)聊天系統(tǒng)應(yīng)該具備的功能、運(yùn)行方式和實(shí)現(xiàn)方式, 開發(fā)出一個(gè)基于 Socket的網(wǎng)絡(luò)聊天工具。該系統(tǒng)主要實(shí)現(xiàn)功能包括:注冊(cè)、登錄、聊天和文件的傳輸。頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!第一章系統(tǒng)開發(fā)工具簡(jiǎn)介第一節(jié)客戶機(jī) / 效勞器模型一、 C/S 構(gòu)造簡(jiǎn)介客戶機(jī) /效勞器模型,又稱為Client/Ser

11、ver 模型,簡(jiǎn)稱 C/S架構(gòu)5。C/S 計(jì)算技術(shù)在信息產(chǎn)業(yè)中占有重要的地位。它是軟件系統(tǒng)體系構(gòu)造, 通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到 Client 端和 Server端來實(shí)現(xiàn), 降低了系統(tǒng)的通訊開銷。 客戶端的任務(wù)是將用戶的要求提交給效勞器程序, 再將效勞器程序返回的結(jié)果以特定的形式顯示給用戶。效勞器程序的任務(wù)是接收客戶程序提出的效勞請(qǐng)求,進(jìn)展相應(yīng)的處理,再將結(jié)果返回給客戶程序。二、 C/S 特點(diǎn)C/S 是客戶端 / 效勞器,一般適合于軟件開發(fā),對(duì)客戶端的計(jì)算機(jī)配置要求比擬高,客戶端也需要安裝軟件,比方QQ。C/S 架構(gòu)軟件的特點(diǎn)如下:應(yīng)用效勞器運(yùn)行數(shù)據(jù)負(fù)荷較輕。C/S

12、 體系構(gòu)造由客戶應(yīng)用程序和數(shù)據(jù)庫效勞程序組成, 二者分別稱為前臺(tái)程序和后臺(tái)程序。一旦效勞器程序被啟動(dòng), 就隨時(shí)等待響應(yīng)客戶程序發(fā)來的請(qǐng)求; 客戶應(yīng)用程序當(dāng)需要對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)展任何操作時(shí),客戶程序就會(huì)自動(dòng)尋找效勞器程序,并向其發(fā)出請(qǐng)求, 效勞器程序根據(jù)規(guī)程做出響應(yīng),返回結(jié)果,應(yīng)用效勞器運(yùn)行數(shù)據(jù)負(fù)荷較輕。數(shù)據(jù)的儲(chǔ)存管理功能較為透明。 在數(shù)據(jù)庫應(yīng)用中數(shù)據(jù)的儲(chǔ)存管理功能是由效勞器程序和客戶應(yīng)用程序分別獨(dú)立進(jìn)展的。前臺(tái)應(yīng)用可以違反的規(guī)那么, 并且通常把那些不同的運(yùn)行數(shù)據(jù), 在效勞器程序中不集中實(shí)現(xiàn)。 因此對(duì)于工作在前臺(tái)程序上的最終用戶是 “透明的,他們無須干預(yù)背后的過程就可以完成自己的一切工作。在

13、C/S 提醒體系下,數(shù)據(jù)庫不能真正成為公共、專業(yè)化的倉庫,它受到獨(dú)立的專門管理。頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!第二節(jié)JAVA 簡(jiǎn)介Java是由 SunMicrosystems公司于 1995 年 5 月推出的 java 程序設(shè)計(jì)語言和Java平臺(tái)的總稱。用 Java實(shí)現(xiàn)的 HotJava瀏覽器支持 Java applet 顯示了 Java的魅力:跨平臺(tái)、動(dòng)態(tài)的Web、internet 計(jì)算。從此Java 被廣泛承受并推動(dòng)力web 的迅速開展,常用的瀏覽器限制均支持Java applet 。Java 平臺(tái)由Java 虛擬機(jī) Java Virtual Machine和Java 應(yīng)用編程接口

14、Application Programming Interface,簡(jiǎn)稱 API 構(gòu)成。Java應(yīng)用在編程接口為Java應(yīng)用提供了一個(gè)獨(dú)立于操作系統(tǒng)的標(biāo)準(zhǔn)接口,可分為根本局部和擴(kuò)展局部。 在硬件和操作系統(tǒng)平臺(tái)上安裝一個(gè)Java平臺(tái)之后, Java應(yīng)用程序就可運(yùn)行。 Java應(yīng)用編程接口已經(jīng)從1.1X 版本開展到 1.2 版。目前常用的 Java平臺(tái)基于 Java 1.4 ,最近版本為 Java1.7。Java 分為三個(gè)體系J2SE(Java2 Standard Edition) ,J2EE(Java 2 Platform enterprise Edition),J2ME(Java 2 Micr

15、o Edition)。Java是一種具有簡(jiǎn)單性 Java語法是 C+ 語法的一個(gè)“純潔版本 、面向?qū)ο竺嫦驅(qū)ο笫且环N程序設(shè)計(jì)技術(shù),它將重點(diǎn)放在數(shù)據(jù)和對(duì)象的接口上、網(wǎng)絡(luò)技能Java有一個(gè)擴(kuò)展的例程庫,用于處理和 FTP 這類的 TCP/IP 協(xié)議 、強(qiáng)健性、平安性 Java可以構(gòu)建防病毒、防篡改的系統(tǒng) 、體系構(gòu)造中立、可移植性、解釋型、高性能、多線程的動(dòng)態(tài)語言6。Java的 I/O 建立于流 stream 之上。輸入流讀取數(shù)據(jù);輸出流寫入數(shù)據(jù)。不同的流類如和讀寫某一種數(shù)據(jù)源。但是所有輸入流都有一樣的根本方法,所有輸入流也使用一樣根本方法來讀取數(shù)據(jù)7。Java中的數(shù)據(jù)流類型有兩種:輸出流Outpu

16、tStream :輸出流數(shù)據(jù)流經(jīng)數(shù)據(jù)從程序送到數(shù)據(jù)接收者,如可以向顯示器屏幕或者文件傳輸數(shù)據(jù)。輸出流只能寫不能讀。輸入流 InputStream :程序從外部設(shè)備寫數(shù)據(jù)時(shí),使用輸入流。輸入流將數(shù)據(jù)從數(shù)據(jù)源傳遞給程序, 可以從鍵盤或者文件中獲得數(shù)據(jù)。輸入流只能讀不能寫。第三節(jié)Socket 簡(jiǎn)介頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!Socket 通常被稱為“套接字,用于描述IP 地址和端口8。Socket 是建立在傳輸層協(xié)議主要是 TCP和 UDP 上的一種套接字標(biāo)準(zhǔn)9, Socket接口是 TCP/IP網(wǎng)絡(luò)的 API。在網(wǎng)絡(luò)通信中,如果兩臺(tái)計(jì)算機(jī)之間是靠一個(gè)“通道通信,那么這個(gè)“通道的兩端就是套

17、接字。Socket是傳輸層提供的網(wǎng)絡(luò)進(jìn)程通信接口, 相當(dāng)于我們現(xiàn)在所用的 “插座,是進(jìn)程之間通信的抽象連接點(diǎn)。在日常生活中, 我們常見到信號(hào)插座、插座、接收/發(fā)送信號(hào)或能量的插座。Socket就相當(dāng)于在線和機(jī)之間安放的插座。在網(wǎng)絡(luò)上, 兩個(gè)程序是靠一個(gè)雙向鏈路進(jìn)展通信,這個(gè)雙向鏈路的每一端就成為一個(gè) Socket。進(jìn)程之間通信,首先要需要建立一個(gè)自己的Socket,每個(gè) Socket都能進(jìn)展讀/寫操作,進(jìn)展讀寫操作時(shí)就會(huì)用到Socket中的輸入 /輸出流10??蛻舳私?Socket對(duì)象步驟:1、調(diào)用 Socket()創(chuàng)立一個(gè)流套接字,并連接到效勞器端;Socket s=new Socket(

18、InetAddress.getByName( “效勞器的主機(jī)名 ),port); 2、調(diào)用 Socket 類的 getOutputStream() 和 getInputStream 獲取輸出流和輸入流,開場(chǎng)網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送和接收。OutputStream os=s.getOutputStream(); InputStream is=s.getInputStream(); byte buf=new byte100; int len=is.read(buf);/從效勞器端讀取數(shù)據(jù)System.out.println(new String(buf,0,len); os.write(Hello,this

19、 is client.getBytes();/ 向效勞器端輸入數(shù)據(jù)3、最后關(guān)閉通信套接字。os.close();is.close();s.close() ;效勞器端建立 Socket步驟:1、創(chuàng)立一個(gè)效勞器端套接字,并綁定到指定端口上;ServerSocket ss=new ServerSocket(int port) ,2、調(diào)用 accept() ,監(jiān)聽連接請(qǐng)求,如果客戶端請(qǐng)求連接,那么承受連接,返回通信套接字。Socket s=ss.accept(); 3、調(diào)用 Socket 類的 getOutputStream() 和 getInputStream 獲取輸出流和輸入流,開場(chǎng)網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送

20、和接收。OutputStream os=s.getOutputStream(); InputStream is=s.getInputStream(); os.write(Hello,this is server! .getBytes();/向客戶端發(fā)送數(shù)據(jù)頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!byte buf=new byte100; int len=is.read(buf);/從客戶端讀取數(shù)據(jù)System.out.println(new String(buf,0,len); 4、最后關(guān)閉通信套接字。os.close(); is.close(); s.close(); 建立連接后,客戶端可以發(fā)

21、出向Socket寫數(shù)據(jù)的請(qǐng)求,效勞器端那么會(huì)對(duì)這個(gè)請(qǐng)求進(jìn)展處理,并將處理結(jié)果通過Socket返回。效勞器端那么會(huì)對(duì)客戶端進(jìn)展監(jiān)聽,當(dāng)監(jiān)聽到客戶端有連接請(qǐng)求時(shí), 客戶端就會(huì)與效勞器端建立一個(gè)通信連接。同時(shí),客戶端被分配一個(gè)與Socket連接的本地端口號(hào),效勞器也會(huì)獲取一個(gè)本地端口號(hào)。Socket之通信主要使用 TCP 和 UDP 兩種協(xié)議 ,UDP 和 TCP 套接字用于傳輸延遲敏感的, 但耐錯(cuò)誤的數(shù)據(jù)流, 例如多媒體流的應(yīng)用程序產(chǎn)生的數(shù)據(jù),適不適合的11。面向連接的套接字使用的是TCP協(xié)議,該協(xié)議可以保證數(shù)據(jù)的可靠傳輸;無連接的套接字通信使用的是UDP 協(xié)議,該協(xié)議不能保證數(shù)據(jù)的可靠傳輸和連接

22、的有效性。1、使用 TCP協(xié)議進(jìn)展通信必須完成以下過程,如圖1.1 所示??蛻舳送ㄟ^ Connect方法連接到指定的效勞器;通過 write 方法向效勞器發(fā)送效勞請(qǐng)求;通過 read從效勞端接收數(shù)據(jù)。效勞器端使用 Bind 方法綁定所指定的端口使Socket與一個(gè)本地端口相聯(lián);使用 Listen 方法監(jiān)聽該端口上的請(qǐng)求;當(dāng)監(jiān)聽到用戶端發(fā)出的連接請(qǐng)求時(shí),調(diào)用Accept 完成連接的操作;處理客戶端請(qǐng)求后,使用write 方法將數(shù)據(jù)返回給客戶端;建立新的 Socket以處理傳入的連接請(qǐng)求。2、使用 UDP 通信必須完成以下過程,如圖1.2 所示??蛻舳送ㄟ^ Connect方法連接到指定的效勞器;通

23、過 write 方法向效勞器發(fā)送效勞請(qǐng)求; 通過 read從效勞端接收數(shù)據(jù);效勞器端使用 Bind 方法綁定所指定的端口使Socket與一個(gè)本地端口相聯(lián);頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!使用 Listen 方法監(jiān)聽該端口上的請(qǐng)求;當(dāng)監(jiān)聽到用戶端發(fā)出的連接請(qǐng)求時(shí),效勞器端處理連接請(qǐng)求;使用 write 將結(jié)果返回到客戶端。Socket()Blind()Listen()Accept()阻塞,等待客戶請(qǐng)求連接Read()處理服務(wù)請(qǐng)求Write()Close()Write()Connect()Socket()服務(wù)器建立連接服務(wù)請(qǐng)求Read()Close()響應(yīng)服務(wù)圖 1.1 面向連接的客戶機(jī)/

24、效勞器交互過程頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!Socket()Blind()Listen()阻塞,等待客戶請(qǐng)求連接Write()Connect()Socket()服務(wù)器客戶Read()處理服務(wù)請(qǐng)求Write()服務(wù)請(qǐng)求服務(wù)應(yīng)答圖 1.2 面向無連接的客戶機(jī)/ 效勞器交互過程第四節(jié)Eclipse 簡(jiǎn)介Eclipse 是一個(gè)開放源代碼、基于Java的可擴(kuò)展的開發(fā)平臺(tái)。其實(shí)它只是一個(gè)框架和一組效勞,用于通過插件組成構(gòu)建開發(fā)環(huán)境。Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括 Java開發(fā)工具 (Java Development Kit,JDK)。Eclipse還包括插件開發(fā)環(huán)境 (Plug-in

25、 Development Environment,PDE), 這個(gè)組件主要是針對(duì)希望把Eclipse 擴(kuò)展的軟件開發(fā)人員, 因?yàn)樗试S構(gòu)建與Eclipse環(huán)境無縫集成的工具。 由于 Eclipse中的每樣?xùn)|西都是插件, 對(duì)于給 Eclipse 提供插頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!件,以及用戶提供一致和同意的環(huán)境而已,所有工具開發(fā)人員都具有同等的發(fā)揮場(chǎng)所。Eclipse的本身只是一個(gè)框架平臺(tái),但是由于很多插件的支持使得Eclipse擁有其他功能相對(duì)固定的IDE 軟件很難具有靈活性。許多軟件開發(fā)商以Eclipse 為框架開發(fā)自己的IDE。Eclipse 是一個(gè)開放源碼工程,由于開放源碼,任

26、何人都可以免費(fèi)得到,并可以在此根底上開發(fā)各自的插件,因此越來越受人們的關(guān)注。第五節(jié)MySQL 簡(jiǎn)介MySQL 是目前最為流行的開放源碼的數(shù)據(jù)庫管理系統(tǒng)DBMS ,是完全網(wǎng)絡(luò)化的跨平臺(tái)的關(guān)系型數(shù)據(jù)庫系統(tǒng),它是由瑞典的MySQL AB 公司開發(fā)、發(fā)布并支持的。它被廣泛的應(yīng)用在Internet上的大型網(wǎng)站開放中1213。MySQL 最初的開發(fā)出發(fā)點(diǎn)是使用MySQL 來連接用戶的表,這類表采用了快速低層面 ISAM子程序。然而,經(jīng)過一些測(cè)試后,發(fā)現(xiàn)MySQL 的速度或靈活性不能滿足用戶的需求。所以為用戶的數(shù)據(jù)庫提供新的SQL 接口,但 API接口與 MySQL 的幾乎一樣。 MySQL 一直專注于速度

27、、可靠性、擴(kuò)展性和易用性,而且在開展過程中,不斷引入了一些企業(yè)級(jí)特性,包括復(fù)制、全文搜索、事件、外鍵完整性、行級(jí)鎖定等。同時(shí)在MySQL5 中,還進(jìn)一步引入視圖、存儲(chǔ)過程、觸發(fā)器等高級(jí)特性,使得MySQL 能進(jìn)一步滿足企業(yè)級(jí)應(yīng)用的需要。MySQL 具有如下的優(yōu)勢(shì):1、速度: MySQL 的運(yùn)行速度很快。2、價(jià)格: MySQL 對(duì)很多個(gè)人使用來說是免費(fèi)的。3、容易使用:與其他大型數(shù)據(jù)庫的設(shè)置和管理相比,其復(fù)雜程度低,容易學(xué)習(xí)。4、可移植性:能夠在很多不同的系統(tǒng)平臺(tái)上工作,如Windows、Linux、Unix、Mac OS 等。5、豐富的接口: MySQL 提供了用于 C、C+、Eiffel、J

28、ava、Perl、PHP、Python、Ruby 和 Tcl 等語言的 API。6、支持查詢語言: MySQL 可以利用標(biāo)準(zhǔn) SQL 語法和支持 ODBC開放式數(shù)據(jù)庫連接的應(yīng)用程序。7、平安性和連接性:十分靈活和平安的權(quán)限和密碼系統(tǒng),允許基于主機(jī)的驗(yàn)證。連接到效勞器時(shí), 所有的密碼傳輸均采用加密形式, 從而保證了密碼平安。頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!并且由于 MySQL 是網(wǎng)絡(luò)化的,因此可以在因特網(wǎng)上的任何地方訪問,提供數(shù)據(jù)共享的效率。本章小結(jié)本章主要介紹了開發(fā)網(wǎng)絡(luò)聊天系統(tǒng)所使用到的工具,介紹了客戶機(jī)/ 效勞器模型、 Java、Socket、Eclipse 和 MySQL。從使用的工

29、具可以看出,該系統(tǒng)使用的 c/s 開發(fā)模型,使用 JDK+Eclipse 作為開發(fā)技術(shù)平臺(tái),以MySQL 作為數(shù)據(jù)庫,使用 Socket作為理論根底。這些工具對(duì)于該系統(tǒng)來說必不可少。頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!第二章系統(tǒng)分析第一節(jié)可行性分析可行性分析 Feasibility Analysis也稱為可行性研究。它是以系統(tǒng)調(diào)查為根底,針對(duì)開發(fā)新系統(tǒng)是否具有必要性和可能性,對(duì)新系統(tǒng)的開發(fā)從技術(shù)、經(jīng)濟(jì)、社會(huì)的方面進(jìn)展分析和研究, 從而防止投資失誤, 保證新系統(tǒng)成功開發(fā)。 可行性研究是為了用最小的代價(jià)在盡可能短的時(shí)間內(nèi)確定問題能否解決??尚行苑治霭ㄒ韵聨讉€(gè)方面的內(nèi)容。經(jīng)濟(jì)可行性: 從經(jīng)濟(jì)可行

30、性角度出發(fā), 在開發(fā)系統(tǒng)的過程中, 必須要考慮如何節(jié)約開發(fā)本錢, 縮短開發(fā)周期, 用最少的本錢獲取最大的回報(bào)。為了保證軟件產(chǎn)品的質(zhì)量, 系統(tǒng)的開發(fā)周期一般都是在一個(gè)月左右,并且要保證有充裕的時(shí)間進(jìn)展調(diào)研和測(cè)試。本系統(tǒng)開發(fā)經(jīng)費(fèi)對(duì)于企業(yè)來說經(jīng)濟(jì)上是可以承受的,開發(fā)該網(wǎng)絡(luò)通信系統(tǒng)所需的軟件環(huán)境 Eclipse 開發(fā)工具和數(shù)據(jù)庫MySQL 和所需的硬件環(huán)境計(jì)算機(jī)及其相關(guān)硬件,在市場(chǎng)上都很容易買到而且很廉價(jià),或者也可以在相關(guān)網(wǎng)站上進(jìn)展免費(fèi)下載。 開發(fā)該系統(tǒng)本錢就要集中在系統(tǒng)的開發(fā)和維護(hù)上,對(duì)用戶不會(huì)造成經(jīng)濟(jì)負(fù)擔(dān)。 而且當(dāng)系統(tǒng)投入使用后, 企業(yè)內(nèi)部交流工具也可以使用該系統(tǒng),一方面保證了內(nèi)部信息的平安, 一

31、方面也充分利用了網(wǎng)絡(luò)資源。 所獲得的效益將遠(yuǎn)遠(yuǎn)超過系統(tǒng)開發(fā)的本錢,所以在經(jīng)濟(jì)方面是可行的。技術(shù)可行性:該系統(tǒng)使用的開發(fā)語言是Java,由于 Java語言具有跨平臺(tái)性,所以很多編程者都會(huì)選擇它。 經(jīng)過多年的開展Java虛擬機(jī)已經(jīng)具有很高的版本,在性能上也有了很大的提高,在API 函數(shù)方面有了許多擴(kuò)大和冗余的精簡(jiǎn)。本系統(tǒng)采用 C/S 架構(gòu) 。因?yàn)?C/S 具有一定的靈活性、通用性和易操作性等特點(diǎn),是用戶對(duì)來說是一個(gè)比擬好的選擇。目前這種架構(gòu)在系統(tǒng)架構(gòu)方面被廣泛采用,在系統(tǒng)架構(gòu)上已經(jīng)積累了大量的經(jīng)歷,所以本系統(tǒng)在技術(shù)上是可行的。社會(huì)可行性: 隨著計(jì)算機(jī)的開展和普及, 以及互聯(lián)網(wǎng)技術(shù)的開展, 很多公司

32、和企業(yè)都能夠提供局域網(wǎng)信息效勞。 而網(wǎng)絡(luò)聊天系統(tǒng)只需要用戶的電腦進(jìn)入局域網(wǎng)就能訪問,不必購置其他任何昂貴設(shè)備,大大節(jié)約了資金。無論從技術(shù)可行性、 經(jīng)濟(jì)可行性還是社會(huì)可行性來說,系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)都是可行的。頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!第二節(jié)業(yè)務(wù)流分析對(duì)系統(tǒng)的組織構(gòu)造和功能分析時(shí),可以將系統(tǒng)分為: 網(wǎng)絡(luò)聊天客戶端、 網(wǎng)絡(luò)聊天效勞器端和數(shù)據(jù)庫三個(gè)局部。對(duì)系統(tǒng)的組織構(gòu)造和功能進(jìn)展分析時(shí),需要以一個(gè)實(shí)際業(yè)務(wù)流程的角度將系統(tǒng)調(diào)查中有關(guān)該業(yè)務(wù)流程的資料都聯(lián)系起來作為下一步的分析根底。 業(yè)務(wù)流程分析可以幫助我們了解業(yè)務(wù)的具體處理過程,發(fā)現(xiàn)和處理系統(tǒng)的調(diào)查工作中的欠缺和錯(cuò)誤,修改和刪除原系統(tǒng)的不合理局

33、部,在新系統(tǒng)根底上優(yōu)化業(yè)務(wù)處理流程。 圖 2.1 為該系統(tǒng)的業(yè)務(wù)流程圖, 該系統(tǒng)的業(yè)務(wù)流程如下:1、啟動(dòng)系統(tǒng)的效勞器,客戶端運(yùn)行程序,出現(xiàn)登錄界面。2、點(diǎn)擊注冊(cè),客戶端向效勞器端發(fā)出注冊(cè)請(qǐng)求,假設(shè)注冊(cè)成功,回到登錄界面。3、用戶點(diǎn)擊登錄,客戶端向效勞器端發(fā)出登錄請(qǐng)求,效勞器將用戶信息與數(shù)據(jù)用戶信息進(jìn)展匹配,假設(shè)匹配成功,用戶進(jìn)入功能界面;反之,那么提示用戶密碼錯(cuò)誤。4、用戶登錄后, 客戶端向效勞器發(fā)送處理某些事件的請(qǐng)求,如私聊、群聊、文件傳輸?shù)取?、效勞器將信息準(zhǔn)確轉(zhuǎn)發(fā)到用戶。第三節(jié)需求分析軟件需求說明能把軟件功能和性能的總體概念描述為具體的軟件,從而奠定軟件開發(fā)根底。該過程將軟件方案階段所確

34、定的軟件范圍逐步細(xì)化到可詳細(xì)定義的程度并分析出各種不同的軟件元素,然后為這些元素找到可行的解決方法。總的來說,是對(duì)軟件方案階段建立的軟件工作范圍的求精和細(xì)化。它答復(fù)了“系統(tǒng)該做什么的問題14。一、系統(tǒng)設(shè)計(jì)目標(biāo)網(wǎng)絡(luò)聊天系統(tǒng)主要對(duì)象是局域網(wǎng)內(nèi)的用戶,使用交流更簡(jiǎn)單。 設(shè)計(jì)本系統(tǒng)的頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!目標(biāo)如下:1、一臺(tái)電腦上能夠同時(shí)登錄多個(gè)不同的用戶。2、用戶注冊(cè)。用戶通過填寫根本資料進(jìn)展注冊(cè),用戶根本信息被數(shù)據(jù)庫保存。3、用戶登錄。用戶使用注冊(cè)時(shí)的用戶名和密碼登錄系統(tǒng)。4、聊天。用戶登錄成功后,可以向單個(gè)或所有在線好友發(fā)送消息。5、文件傳輸。用戶之間除了能夠使用文字交流外,還能共

35、享文件。二、系統(tǒng)功能需求1、注冊(cè)用戶首先要進(jìn)展注冊(cè)。 用戶在注冊(cè)時(shí)需要填寫用戶名、密碼等相關(guān)信息。 系統(tǒng)將該用戶名作為登錄的賬號(hào)。2、登錄登錄時(shí)用戶用注冊(cè)的用戶名進(jìn)展登錄。用戶點(diǎn)擊登錄按鈕, 客戶端將用戶信息發(fā)送到效勞器,效勞器對(duì)用戶信息進(jìn)展驗(yàn)證,返回相應(yīng)的驗(yàn)證結(jié)果。假設(shè)驗(yàn)證成功,用戶進(jìn)入主界面;假設(shè)驗(yàn)證失敗,那么返回錯(cuò)誤信息,用戶回到登錄界面。3、聊天該系統(tǒng)只能對(duì)在線好友進(jìn)展聊天。聊天可以分為私聊和群聊。私聊:私聊就是兩人之間的聊天,及一對(duì)一的聊天。群聊:群聊就是多人之間的聊天,及一對(duì)一的聊天。4、文件傳輸該系統(tǒng)文件傳輸可以分為發(fā)送文件和接收文件。發(fā)送文件:用戶通過本系統(tǒng)將本地文件發(fā)送給在線

36、好友。接收文件:用戶接收好友分享的文件,并將文件保存在本地。頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!運(yùn)行程序登錄界面錯(cuò)誤信息報(bào)告用戶注冊(cè)輸入用戶名和密碼登錄密碼錯(cuò)誤數(shù)據(jù)庫匹配功能界面功能處理圖 2.1 系統(tǒng)業(yè)務(wù)流程圖本章小結(jié)本章主要對(duì)網(wǎng)絡(luò)聊天系統(tǒng)的可行性、業(yè)務(wù)流和需求進(jìn)展了分析。 在需求分析中,分析了該系統(tǒng)的設(shè)計(jì)目標(biāo)和功能需求,該系統(tǒng)的主要功能包括注冊(cè)、登錄、聊天和文件傳輸。頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!第三章系統(tǒng)概要設(shè)計(jì)第一節(jié)系統(tǒng)總體描述能夠說明系統(tǒng)軟件功能組成模塊的就是系統(tǒng)體系構(gòu)造,其中包括具體有哪些模塊,系統(tǒng)由哪些功能以及構(gòu)造組成。圖3.1 是本系統(tǒng)的體系構(gòu)造圖:系統(tǒng)結(jié)構(gòu)模塊客戶端

37、注冊(cè)模塊登錄模塊聊天模塊文件傳輸模塊服務(wù)器端控制模塊圖 3.1 系統(tǒng)體系構(gòu)造圖本系統(tǒng)總的來說包括兩個(gè)局部: 效勞器端和客戶端。 在效勞器端主要是效勞器控制模塊, 接收客戶端發(fā)來的連接請(qǐng)求, 根據(jù)客戶端的要求將信息準(zhǔn)確的轉(zhuǎn)發(fā)到客戶端。 客戶端主要包括四個(gè)模塊, 用戶在第一次進(jìn)入系統(tǒng)時(shí), 必須首先進(jìn)展注冊(cè), 效勞器將用戶注冊(cè)的信息存入數(shù)據(jù)庫, 以便用戶再次進(jìn)入系統(tǒng)時(shí)不再注冊(cè);用戶注冊(cè)后就可以直接點(diǎn)擊登錄,登錄時(shí)客戶端將用戶填寫的信息發(fā)送到效勞器,效勞器將用戶信息與數(shù)據(jù)中的信息進(jìn)展匹配,假設(shè)用戶未登錄且信息存在,就返回登錄成功; 用戶登錄成功后就進(jìn)入到主界面,用戶可以看到在線好友, 點(diǎn)擊單個(gè)用戶就可

38、以進(jìn)展私聊,點(diǎn)擊所有人選項(xiàng)就可以群聊。頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!第二節(jié)模塊設(shè)計(jì)一、注冊(cè)模塊設(shè)計(jì)連接效勞器以后, 用戶填寫注冊(cè)用戶名、 密碼和性別, 然后客戶端向效勞器端發(fā)送用戶注冊(cè)的根本信息, 效勞器接收到信息后, 效勞器將用戶信息存儲(chǔ)在數(shù)據(jù)庫,并提醒用戶注冊(cè)成功。假設(shè)用戶注冊(cè)失敗,那么返回用戶注冊(cè)失敗。二、登錄模塊設(shè)計(jì)1、用戶注冊(cè)后,直接點(diǎn)擊登錄按鈕,就可以直接進(jìn)入主界面。假設(shè)用戶之前已經(jīng)注冊(cè),那么登錄時(shí),用戶需要填寫用戶名、密碼和性別。2、用戶填寫資料后,點(diǎn)擊登錄按鈕??蛻舳讼蛐谄靼l(fā)送登錄請(qǐng)求。登錄時(shí),如用戶點(diǎn)擊退出按鈕,那么用戶將退出登錄系統(tǒng);假設(shè)不退出,效勞器接收到客戶端

39、發(fā)送的登錄請(qǐng)求后,將用戶信息與數(shù)據(jù)庫中存儲(chǔ)的用戶信息進(jìn)展匹配。3、效勞器異常,假設(shè)連接效勞器失敗,那么顯示錯(cuò)誤,系統(tǒng)將停留在登錄界面。4、假設(shè)通過驗(yàn)證,返回用戶信息,同時(shí)向用戶顯示在線好友信息。三、聊天模塊設(shè)計(jì)1、用戶登錄成功后,就進(jìn)入到聊天頁面。用戶在用戶列表中可以看到在線用戶。2、假設(shè)用戶需要進(jìn)展私聊,那么用戶可以在用戶列表中雙擊需要聊天的好友,然后必須勾選私聊框。3、假設(shè)用戶私聊,還可以在界面下方的組合框中選擇好友,也必須勾選私聊框。4、假設(shè)用戶需要進(jìn)展群聊,可以好友列表中選擇所有人,或者在界面下方的組合框中選擇所有人,不需要勾選私聊框。5、在信息輸入框中輸入需要發(fā)送的信息,點(diǎn)擊發(fā)送信息

40、按鈕,就可以發(fā)出信息。6、用戶在自己的聊天框中可以看到之前發(fā)送的信息以及發(fā)送對(duì)象。四、文件傳輸模塊頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!1、用戶點(diǎn)擊翻開文件按鈕,及可以彈出本地文件,用戶可以在本地盤中選擇將要發(fā)送的文件。2、選擇好文件以后,點(diǎn)擊翻開,然后選擇的文件就會(huì)出現(xiàn)在用戶發(fā)送文件的框中。3、用戶在點(diǎn)擊發(fā)送之前,必須先將發(fā)送文件框中的文件選中。4、用戶選擇文件的接收對(duì)象。5、點(diǎn)擊發(fā)送文件,文件就會(huì)被發(fā)送出去。6、好友將會(huì)收到系統(tǒng)發(fā)出的文件承受提醒。7、好友選中用戶發(fā)來的文件,點(diǎn)擊接收文件按鈕。8、點(diǎn)擊接收文件按鈕之后,將彈出一個(gè)保存文件框,好友就可以將文件保存在電腦的本地盤中。9、在接收文

41、件時(shí),需要對(duì)文件進(jìn)展命名,好友在命名時(shí)必須在自己加上文件的后綴名,否那么會(huì)翻開失敗。10、好友接收文件后, 假設(shè)文件發(fā)送完成, 在用戶這邊將進(jìn)展提醒, 然后將文件發(fā)送框進(jìn)展清空。第三節(jié)數(shù)據(jù)庫設(shè)計(jì)一、設(shè)計(jì)原那么數(shù)據(jù)庫在設(shè)計(jì)過程中會(huì)遇到很多數(shù)據(jù)的問題,如數(shù)據(jù)的喪失,數(shù)據(jù)的不正確,不匹配的數(shù)據(jù)和不準(zhǔn)確的信息。 一個(gè)差的數(shù)據(jù)庫設(shè)計(jì)通常是這些類型的問題根本原因15。因此一個(gè)好的數(shù)據(jù)庫就需要有一定的設(shè)計(jì)原那么。在數(shù)據(jù)庫設(shè)計(jì)中, 原始單據(jù)與實(shí)體之間可以是一對(duì)一、一對(duì)多、多對(duì)多的關(guān)系。主鍵與外鍵之間一般是一個(gè)實(shí)體既不能無主鍵也不能無外鍵,主鍵是實(shí)體的高度抽象, 主鍵與外鍵的配對(duì), 表示實(shí)體之間的連接。 在創(chuàng)立

42、表時(shí)一定要注意表的原子性, 即根本表中的字段是不能再分解;原始性,根本表中的記錄是原始數(shù)據(jù)的記錄; 演繹行,根本表與代碼表中的數(shù)據(jù)可以派生出所有的輸出數(shù)據(jù);穩(wěn)定性,根底表的構(gòu)造式相對(duì)穩(wěn)定,表中的記錄需要長(zhǎng)期保存。在設(shè)計(jì)過程中設(shè)計(jì)范式的要求16是:1、第一范式 (1NF):數(shù)據(jù)庫中的每一列都是不可分割的根本數(shù)據(jù)項(xiàng),同一列中不能有多個(gè)值,即實(shí)體中的某個(gè)屬性不能有多個(gè)值或者不能有重復(fù)的屬性。頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!2、第二范式 (2NF):要求數(shù)據(jù)庫表中的每個(gè)實(shí)例或行必須可以被唯一區(qū)分。為實(shí)現(xiàn)區(qū)分,通常需要為表加上一個(gè)列,用來儲(chǔ)存各個(gè)實(shí)例的唯一標(biāo)識(shí)。3、第三范式 (3NF)要求數(shù)據(jù)庫表

43、中不包含已在其他表中已包含的非主關(guān)鍵字信息。二、具體步驟1、數(shù)據(jù)庫需求分析數(shù)據(jù)庫在一個(gè)工程編寫過程中起著非常重要的作用。數(shù)據(jù)庫需求分析的步驟分為:調(diào)查機(jī)構(gòu)情況、熟悉業(yè)務(wù)活動(dòng)、明確用戶需求、去頂系統(tǒng)邊界、分析系統(tǒng)功能、分析系統(tǒng)數(shù)據(jù)和編寫分析報(bào)告,其中與用戶不斷深入地進(jìn)展交流,獲得用戶的實(shí)際需求是數(shù)據(jù)庫設(shè)計(jì)中一個(gè)很重要的步驟。2、數(shù)據(jù)字典數(shù)據(jù)字典是系統(tǒng)中各類數(shù)據(jù)描述的集合,是進(jìn)展詳細(xì)的數(shù)據(jù)收集和數(shù)據(jù)分析所獲得的主要成果。 對(duì)于該系統(tǒng), 對(duì)應(yīng)相應(yīng)的功能, 就可得出數(shù)據(jù)字典的主要局部。該系統(tǒng)的主要數(shù)據(jù)構(gòu)造如表3.2。表 3.2 數(shù)據(jù)構(gòu)造表數(shù)據(jù)構(gòu)造名含義說明組成局部用戶包含用戶根本信息用戶名、密碼等3、

44、數(shù)據(jù)庫概念構(gòu)造設(shè)計(jì)將需求分析得到的用戶需求抽象為信息構(gòu)造即概念模型的過程就是概念構(gòu)造設(shè)計(jì)。概念構(gòu)造設(shè)計(jì)是整個(gè)數(shù)據(jù)庫設(shè)計(jì)的關(guān)鍵。概念構(gòu)造是各種數(shù)據(jù)模型的共同根底。描述概念模型的有力工具是實(shí)體- 聯(lián)系圖 E-R 圖 。對(duì)于該聊天系統(tǒng), 由于對(duì)功能的要求不太復(fù)雜, 所以其概念設(shè)計(jì)采用自頂向下地進(jìn)展需求分析,和自底向上地設(shè)計(jì)概念構(gòu)造。該系統(tǒng)的實(shí)體有一個(gè),即用戶實(shí)體,其中實(shí)體圖如下:用戶用戶名密碼頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!圖 3.3 用戶實(shí)體圖在該系統(tǒng)中, 由于一個(gè)用戶可以與多個(gè)在線用戶進(jìn)展交流,所以用戶與用戶之間的關(guān)系是多對(duì)多的關(guān)系, 即 m 對(duì) n 的聯(lián)系,所以該網(wǎng)絡(luò)系統(tǒng)的E-R 圖如下

45、:用戶用戶名密碼用戶用戶名密碼交流mn圖 3.4 系統(tǒng)的 E-R 圖4. 、數(shù)據(jù)庫邏輯構(gòu)造設(shè)計(jì)數(shù)據(jù)庫概念設(shè)計(jì)所得的E-R 模型是對(duì)用戶需求的抽象表達(dá)方式,它獨(dú)立于任何一種具體的數(shù)據(jù)模型,所以它不能為任何一個(gè)具體的DBMS 支持。為了能夠建立起最終的物理系統(tǒng),需要將概念構(gòu)造進(jìn)一步轉(zhuǎn)化為某一DBMS 支持的數(shù)據(jù)模型,然后根據(jù)邏輯設(shè)計(jì)的準(zhǔn)那么、數(shù)據(jù)的語義約束、 標(biāo)準(zhǔn)化理論等對(duì)數(shù)據(jù)模型進(jìn)展適當(dāng)?shù)恼{(diào)整和優(yōu)化, 形成合理的全局邏輯構(gòu)造, 并設(shè)計(jì)出用戶子模式。 這就是數(shù)據(jù)庫邏輯設(shè)計(jì)所要完成的任務(wù)。對(duì)于該系統(tǒng), 可以將邏輯概念構(gòu)造轉(zhuǎn)換為一般的關(guān)系模型。該系統(tǒng)所涉及到的數(shù)據(jù)表有一張,用來存放用戶信息。useri

46、nfo(用戶表 )對(duì)應(yīng)的實(shí)體是用戶, 用來存放用戶信息, 用戶信息包括用戶名和用戶密碼。表 3.5 userinfo 列名數(shù)據(jù)類型是否為空備注usernamevarchar 否用戶名passwdvarchar 否用戶密碼本章小結(jié)本章主要介紹了網(wǎng)絡(luò)聊天系統(tǒng)的模塊包括效勞器模塊和客戶端模塊,客戶端頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!模塊主要包括注冊(cè)、 登錄、聊天和文件傳輸四個(gè)模塊。 在模塊設(shè)計(jì)中這些模塊進(jìn)展了具體介紹。還介紹了系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì)原那么和步驟。頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!第四章系統(tǒng)實(shí)現(xiàn)第一節(jié)數(shù)據(jù)庫模塊實(shí)現(xiàn)一、數(shù)據(jù)流圖在對(duì)用戶需求分析完成后, 可以用數(shù)據(jù)流圖用來描述數(shù)據(jù)在系統(tǒng)

47、中流動(dòng)和變換的過程,表達(dá)數(shù)據(jù)與處理過程中的關(guān)系。 該系統(tǒng)的主要功能是用戶登陸后與其他在線用戶進(jìn)展聊天,所以該系統(tǒng)的初步數(shù)據(jù)流圖如下:用戶 A注冊(cè)登錄聊天用戶 B注冊(cè)信息登錄請(qǐng)求發(fā)送信息用戶 A 與用戶 B 進(jìn)展通信,假設(shè) A 沒有用戶名沒有注冊(cè),那么首先用戶A先填寫注冊(cè)信息,然后點(diǎn)擊注冊(cè),效勞器返回注冊(cè)成功信息。A 點(diǎn)擊登錄,客戶端向效勞器發(fā)出登錄請(qǐng)求,效勞器處理請(qǐng)求之后,返回信息。用戶A 進(jìn)入到聊天界面,在信息輸入框中填寫信息,選擇用戶B,點(diǎn)擊發(fā)送信息,信息就可以發(fā)給用戶 B。二、數(shù)據(jù)庫的連接用戶在進(jìn)展注冊(cè)、登錄時(shí),效勞器將與數(shù)據(jù)庫建立連接。啟動(dòng)效勞器后,效勞器開放端口9999,接收客戶端發(fā)

48、來的信息。Java 用 Class.forName() 方法來加載驅(qū)動(dòng),在 MysqlDriver.java 的 getCon()方法中創(chuàng)立數(shù)據(jù)庫的連接,同時(shí)返回該頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!連接。其主要代碼如下:try Class.forName(com.mysql.jdbc.Driver);/ 加載JDBC驅(qū)動(dòng) catch (ClassNotFoundException e) System. out.println(加載驅(qū)動(dòng)異常!。 。 。); e.printStackTrace(); try con=DriverManager.getConnection (jdbc:mysql

49、:/localhost/userinfo?user=root&password=123456);/連接數(shù)據(jù)庫 catch (SQLException e) System. out.println(獲得連接異常!。 。 。); e.printStackTrace(); return con; 數(shù)據(jù)庫加載成功后,用DriverManager 的 getConnection() 方法實(shí)現(xiàn)數(shù)據(jù)庫連接。第二節(jié)注冊(cè)模塊實(shí)現(xiàn)一、功能描述用戶啟動(dòng)客戶端以后,就會(huì)出現(xiàn)一個(gè)注冊(cè)窗口,假設(shè)用戶是第一次使用本系統(tǒng),那么需要注冊(cè)一個(gè)賬號(hào)。用戶填寫信息以后,客戶端向效勞器發(fā)送用戶注冊(cè)的根本信息,效勞器接收到用戶信

50、息以后,進(jìn)展用戶名匹配,假設(shè)沒有匹配到一樣的用戶名,效勞器就將該用戶的根本信息存儲(chǔ)在數(shù)據(jù)庫中,同時(shí)返回注冊(cè)成功信息。該系統(tǒng)的注冊(cè)流程如圖4.2。頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!運(yùn)行程序注冊(cè)窗口填寫用戶名和密碼注冊(cè)用戶名或密碼是否為空數(shù)據(jù)庫匹配用戶名是否存在注冊(cè)成功是否是是否圖 4.2 注冊(cè)流程圖二、主要實(shí)現(xiàn)代碼:當(dāng)用戶啟動(dòng)客戶端,首先出現(xiàn)一個(gè)注冊(cè)窗口。窗口上包括三個(gè)按鈕:登錄、注 冊(cè)、 退出 。 假 設(shè)用 戶 點(diǎn) 擊“ 退出 按鈕, 那 么將 調(diào)用 類 Chat中的 方法actionPerformed()使用if語句if(e.getSource=quit)來處理事件, 采用System.

51、exit(-1)關(guān)閉窗口,退出系統(tǒng)。假設(shè)用戶點(diǎn)擊“注冊(cè)按鈕,客戶端將用戶信息發(fā)送到效勞器端。效勞器啟動(dòng)后,調(diào)用類FriendsThread 對(duì)用戶的注冊(cè)請(qǐng)求進(jìn)展監(jiān)聽,當(dāng)客戶端發(fā)來注冊(cè)請(qǐng)求和用戶信息之后, 調(diào)用類 DtatBases 中的方法 isuser()將用戶名進(jìn)展匹配,假設(shè)沒有在數(shù)據(jù)庫中找到該用戶名,String sql = insert into userinfo values( + t1 + , + t2 + ) 將用信息添加到數(shù)據(jù)庫,同時(shí)返回注冊(cè)成功給客戶端。dout.writeUTF(regedit,+jusername.getText()+,+jpasswd.getText()

52、; String s1 = din.readUTF(); if(s1.equals(成功注冊(cè) ) JOptionPane. showMessageDialog (null , s1); elseif(s1.equals( 該用戶名已經(jīng)被注冊(cè) ) JOptionPane. showMessageDialog (null , s1); else JOptionPane. showMessageDialog (null , 注冊(cè)失敗 ); 頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!第三節(jié)登錄模塊實(shí)現(xiàn)一、功能描述用戶進(jìn)展注冊(cè)后, 在登錄界面中輸入用戶名和密碼以后,點(diǎn)擊登按鈕。 客戶端向效勞器發(fā)送登錄請(qǐng)求和

53、好友根本信息,效勞器將用戶的信息與數(shù)據(jù)庫中的信息進(jìn)展匹配,假設(shè)匹配成功,用戶進(jìn)入主界面;假設(shè)匹配不成功,那么返回到登錄窗口系統(tǒng)的登錄流程圖如圖4.3 。二、主要實(shí)現(xiàn)代碼:用戶在注冊(cè)以后, 只需要填寫用戶名和密碼, 點(diǎn)擊登錄按鈕。 客戶端向效勞器發(fā)送登錄請(qǐng)求,效勞器調(diào)用類FriendsThread建立一個(gè)新的 Socket,然后調(diào)用其中的 run()方法,在 run 方法中調(diào)用 DataBase.java中的 ispasswd()對(duì)用戶的用戶名和密碼進(jìn)展匹配。if (new DataBases().isuser(t1) if (new DataBases().ispasswd(t1, t3) d

54、out.writeUTF(成功登錄 ); System. out.println(t1+: 進(jìn)入了聊天系統(tǒng) ); UserVo user = new UserVo(t1, t2, socket); new Remind().remindOne(socket);/ 顯示所有在線用戶LoginUser.map.put(t1, user); new Remind().remindAll(user);/提醒所有用戶該用戶已上線當(dāng)效勞器匹配成功后,向客戶端發(fā)送登錄成功的信息。用戶進(jìn)入主界面后,同時(shí)提醒所有在線用戶該用戶上線。然后調(diào)用UserVo.java 中的 UseVo(String username

55、,String sex, Socket Soc) 和 Remind.java中的 remindOne()和 remindAll 將用戶信息顯示在好友列表中,同時(shí)在用戶自己的好友列表中顯示當(dāng)前在線用戶,在其他用戶的好友列表中,將該用戶的信息顯示出來。頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!運(yùn)行程序登錄窗口填寫用戶名和密碼是否為空數(shù)據(jù)庫匹配是否匹配成功進(jìn)入功能界面是否否是圖 4.3 登錄流程圖第四節(jié)聊天模塊實(shí)現(xiàn)一、功能描述用戶登錄成功后將進(jìn)入主界面, 用戶在主界面中將看到在線用戶。該用戶可以選擇單個(gè)用戶進(jìn)展私聊, 也可以與當(dāng)前所有人進(jìn)展群聊。 用戶在選擇用戶進(jìn)展私聊時(shí),可以在好友列表中選擇用戶,也可

56、以在組合框中選擇用戶名,進(jìn)展私聊必須勾選私聊框。二、主要代碼實(shí)現(xiàn)用 戶 在 選 擇 與 在 線 用 戶 私 聊 時(shí) , 客 戶 端 調(diào) 用 MainFrame.java中 的valueChanged() 監(jiān)聽用戶是都在好友列表中選擇了用戶String s1 = s.substring(0, s.indexOf( 【); jc1.setSelectedItem(s1) ;/使組合框的好友也為選中的好友當(dāng)用戶選擇用戶以后, 組合框中的用戶也變成被選擇的用戶。同時(shí),用戶進(jìn)展私聊時(shí)必須勾選私聊框, 調(diào)用該類中的 itemStateChanged() 來判斷用戶是否勾選了私聊框。用戶在輸入框中輸入聊天消

57、息,點(diǎn)擊“發(fā)送消息按鈕之后,客戶端就將聊天信息、信息發(fā)送者和信息接收者信息發(fā)送給效勞器,dout.writeUTF(info,+sendname+,+jla1.getText()+,+send1.getText(); send1.setText() 發(fā)送給效勞器以后, 信息數(shù)據(jù)庫就自動(dòng)清空。 效勞器端承受到客戶端發(fā)出的信息頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!后,調(diào)用 LoginUser.java尋找信息接收者的信息根本信息,user=LoginUser.map.get(sendname); soc = user.getSoc(); dout=new DataOutputStream(soc.

58、getOutputStream(); dout.writeUTF(sendname+,+sayname+,+info) 效勞器找到用戶信息后, 就將信息和信息發(fā)送者轉(zhuǎn)發(fā)到該用戶。該用戶的用戶頻道中將顯示消息內(nèi)容、 信息發(fā)送者和系統(tǒng)當(dāng)前時(shí)間。 同樣在發(fā)送信息用戶的用戶頻道中也將顯示用戶發(fā)送信息的內(nèi)容、信息接收者和系統(tǒng)當(dāng)前時(shí)間。用戶與所有用戶群聊時(shí), 可以在好友列表中選擇 “所有人或者在組合框中選擇“所有人項(xiàng),其實(shí)現(xiàn)方法與私聊差不多,只是不需要勾選私聊框。在效勞器端if(sendname.equals(. 所有人 .) for(String s:LoginUser.map.keySet() Sys

59、tem. out.println(s); user = LoginUser. map.get(s); soc = user.getSoc(); dout=new DataOutputStream(soc.getOutputStream(); dout.writeUTF(all,+sayname+,+info); 效勞器在LoginUser.java 中得到所有用戶的信息,所有用戶都將獲得一個(gè)Socket,效勞器將信息內(nèi)容和信息發(fā)送者準(zhǔn)確轉(zhuǎn)發(fā)到每一個(gè)用戶。在客戶端,每個(gè)用戶的主頻道上顯示信息發(fā)送者和信息內(nèi)容。第五節(jié)文件傳輸模塊實(shí)現(xiàn)一、功能描述用戶在好友列表中選擇發(fā)送文件的對(duì)象,點(diǎn)擊“翻開文件按鈕

60、, 彈出一個(gè)文件選擇框, 用戶可以選擇本地文件作為傳輸文件。用戶選擇好文件后, 就可以點(diǎn)擊“發(fā)送文件按鈕,將文件發(fā)送出去, 文件發(fā)送文件流程圖如圖4.4 。文件接收者在文件接收框中選擇文件, 點(diǎn)擊“文件接收按鈕, 彈出文件保存對(duì)話框,用戶選擇文件保存路徑, 為文件命名, 命名時(shí)加上文件的后綴名, 文件接收完成后,可以將文件翻開,接收文件流程圖如圖4.5。頁腳下載后可刪除,如有侵權(quán)請(qǐng)告知?jiǎng)h除!主界面打開文件選擇文件打開選擇好友發(fā)送文件圖 4.4 發(fā)送文件流程圖主界面接收文件選擇保存路徑文件命名確定打開文件圖 4.5 文件發(fā)送流程圖二、主要實(shí)現(xiàn)代碼用 戶 點(diǎn) 擊 “ 翻 開 文 件 按 鈕 后 , 客 戶

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論