




已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
java語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)姓 名: 范高華 學(xué) 號(hào): 200712030213 指導(dǎo)教師: 張洲平 班 級(jí): 信息072 所在院系: 理學(xué)院 java語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)要求要求對(duì)所論問(wèn)題提交課程設(shè)計(jì)報(bào)告(word2003文檔),報(bào)告要求紙張:A4 ;版式:上下均空2.5cm, 左右均空3cm,頁(yè)眉頁(yè)腳各設(shè)1 .5cm 頁(yè)眉:奇數(shù)頁(yè)碼頁(yè)眉:信息專業(yè)java語(yǔ)言程序課程設(shè)計(jì)報(bào)告(宋體小5號(hào)) 偶數(shù)頁(yè)碼頁(yè)眉:算法名稱(宋體小5號(hào))頁(yè)腳:作者簡(jiǎn)介:張三、男、湖南益陽(yáng)人(宋體小5號(hào))文章標(biāo)題:黑體三號(hào)粗體字;二級(jí)標(biāo)題:黑體4號(hào);三級(jí)標(biāo)題黑體小4號(hào)作者姓名與單位:宋體小5號(hào):張三 信息與計(jì)算科學(xué)專業(yè)班摘要:簡(jiǎn)明扼要反映問(wèn)題的實(shí)質(zhì)、解決問(wèn)題的理論、方法、和關(guān)鍵技術(shù),內(nèi)容不超過(guò)200字,宋體小5號(hào)關(guān)鍵詞:三到五個(gè)核心術(shù)語(yǔ)、宋體小5號(hào)正文:宋體5號(hào)(問(wèn)題重述、理論分析、模型、算法、程序流程圖、程序設(shè)計(jì)技術(shù)文檔、程序代碼、程序使用說(shuō)明、針對(duì)給定實(shí)例程序運(yùn)行情況(調(diào)試驗(yàn)證情況)、設(shè)計(jì)總結(jié))附件:程序代碼與流程圖參考文獻(xiàn)題目要求:每人選做1題。課程設(shè)計(jì)報(bào)告形式:以給定版式打印提交。鄭重聲明:設(shè)計(jì)報(bào)告不得出現(xiàn)雷同現(xiàn)象,否則此課程設(shè)計(jì)以0分記。)課程設(shè)計(jì)選題目1、蜘蛛紙牌游戲(提示:需要使用多線程)該游戲通過(guò)鼠標(biāo)操作,將電腦多次分發(fā)的紙牌,按照相同的花色由大到小排列起來(lái),直到桌面上的紙牌全都消失,即為勝利。包括如下功能:a、難度選擇:包括簡(jiǎn)單(單色)、中級(jí)(雙色)、高級(jí)(四色)。b、開(kāi)局:任何時(shí)候可以重新開(kāi)始一盤(pán)新的游戲。c、發(fā)牌。d、顯示可行操作:提示當(dāng)前可行操作。e、簡(jiǎn)單的幫助文檔:對(duì)軟件的簡(jiǎn)單介紹和編制說(shuō)明。2、中國(guó)象棋對(duì)弈系統(tǒng)用java實(shí)現(xiàn)具有一定功能的中國(guó)象棋對(duì)弈軟件,主要功能如下:a、 象棋對(duì)弈:紅方先走,然后黑方再走,紅黑交替,直到一方獲勝。b、 新游戲:任何時(shí)候可以重新開(kāi)始一盤(pán)新的對(duì)弈。c、 悔棋:當(dāng)走錯(cuò)棋的時(shí)候可以悔棋。d、 信息提示:提示當(dāng)前信息狀態(tài)。e、簡(jiǎn)單的幫助文檔:象棋規(guī)則介紹、軟件的簡(jiǎn)單介紹和編制說(shuō)明。3、人事管理系統(tǒng)該系統(tǒng)能夠?qū)δ硢挝坏穆毠みM(jìn)行管理,主要功能如下:a、人事資料輸入:輸入員工信息,如姓名、身份證號(hào)、地址、電話、部門、工資、參加工作時(shí)間、專業(yè)、職務(wù)、備注等。b、信息查詢:可根據(jù)職工編號(hào)、職工名稱、出生年月范圍、工資范圍、參加工作時(shí)間范圍等條件查詢。c、登陸檢測(cè)、用戶管理、密碼修改、權(quán)限設(shè)置。d 、系統(tǒng)初始化:包括操作員信息初始化和職工信息初始化。e、用戶信息修改:擁有權(quán)限的操作員可以修改、凍結(jié)、刪除普通用戶。f、簡(jiǎn)單的幫助文檔:對(duì)軟件的簡(jiǎn)單介紹和編制說(shuō)明。4、java聊天室用java實(shí)現(xiàn)基于C/S模式的聊天室程序。聊天室分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負(fù)責(zé)偵聽(tīng)客戶端發(fā)來(lái)的消息,客戶端需要登陸到服務(wù)器端才可以實(shí)現(xiàn)正常的聊天功能。服務(wù)器端主要功能如下:a、 在特定端口上進(jìn)行偵聽(tīng),等待客戶端連接。b、 用戶可以配置服務(wù)器端的偵聽(tīng)端口,默認(rèn)端口為8888。c、 向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。d、 統(tǒng)計(jì)在線人數(shù)。e、 當(dāng)停止服務(wù)時(shí),斷開(kāi)所有的用戶連接。客戶端的主要功能如下:a、 連接到已經(jīng)開(kāi)啟聊天服務(wù)的服務(wù)器端。b、 用戶可以配置要連接的服務(wù)器端的IP地址和端口號(hào)。c、 用戶可以配置連接后顯示的用戶名。d、 當(dāng)服務(wù)器端開(kāi)啟的話,用戶可以隨時(shí)登陸與注銷。e、 用戶可以向所有人或某一個(gè)人發(fā)送消息。java聊天室范高華 信息與計(jì)算科學(xué)072班摘要:聊天室是一項(xiàng)應(yīng)用廣泛,并且實(shí)用性強(qiáng)的一個(gè)非常典型的人機(jī)交互系統(tǒng)。在信息世界里,聊天工具的使用是非常頻繁的,如MSN、QQ、校內(nèi)通,之類的聊天工具許多人都正在使用。此次設(shè)計(jì)的聊天室系統(tǒng)雖然其功能簡(jiǎn)單,但是在開(kāi)發(fā)技術(shù)和過(guò)程中,能夠充分學(xué)習(xí)和使用JAVA的技術(shù),進(jìn)一步培養(yǎng)學(xué)生面向?qū)ο蟪绦蛟O(shè)計(jì)的思想,加深對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)四大特性的理解。關(guān)鍵詞:Socket;服務(wù)器端; 客戶端; 連接(connection) Abstract:The rapid development of the computer networks has been making a great influence in many fields of human society. In particular, along with information age approaching, between the people tend to increasingly in exchanges and the transmission information through the network. But chats the system is precisely the current people uses many intermediary,。In this platform, people each other which many understanding or did not know can at will mutual exchange. Therefore, the development and overhead construction this kind of platform conforms to the time need to develop.This system with the LAN correspondence mechanism principle, through inheritting the Thread kind to establish the multithreading directly. In the development, it uses the elementary theory knowledge which the computer network programmes. for example, TCP/IP agreement, Client/Server pattern, network programming design method and so on. In the network programming, it realizes reading and transmission of the information, that is, informaton flows realize the information exchange, introduce information flow analysis for realizing a system, in which containes some basic software engineering methods.Key words: Socket ; server ; client ; connection1. 引言當(dāng)今主流的聊天工具有QQ,ICQ,MSN Messenger,Yahoo Messenger等,國(guó)內(nèi)最熱門的當(dāng)屬Q(mào)Q,騰訊QQ(OICQ)是由深圳市騰訊計(jì)算機(jī)系統(tǒng)公司開(kāi)發(fā)的,基于Internet的即時(shí)尋呼軟件。您可以使用QQ和好友用戶進(jìn)行交流,信息即時(shí)發(fā)送,即時(shí)回復(fù),收發(fā)及時(shí)、功能全面。此外QQ還具有BP機(jī)網(wǎng)上尋呼、聊天室、傳輸文件、語(yǔ)音郵件、手機(jī)短訊服務(wù)等功能,QQ不僅僅是虛擬的網(wǎng)絡(luò)尋呼機(jī),更可與傳統(tǒng)的無(wú)線尋呼網(wǎng)、GSM移動(dòng)電話的短消息系統(tǒng)互聯(lián),目前QQ和全國(guó)多家尋呼臺(tái)、移動(dòng)通信公司有業(yè)務(wù)合作。是國(guó)內(nèi)不可多得的中文網(wǎng)絡(luò)尋呼機(jī)。QQ支持顯示朋友在線信息、即時(shí)傳送信息、即時(shí)交談、即時(shí)發(fā)送文件和網(wǎng)址。QQ可以在Win95/98/NT/2000操作系統(tǒng)下運(yùn)行,是十分靈活的網(wǎng)絡(luò)尋呼工具。它會(huì)自動(dòng)檢查您是否已聯(lián)網(wǎng),如果您的電腦已連入Internet,可以搜索網(wǎng)友、顯示在線網(wǎng)友,可以根據(jù)QQ號(hào)、昵稱、姓名、email地址等關(guān)鍵詞來(lái)查找,找到后可加入到通訊錄中。當(dāng)您的通訊錄中的網(wǎng)友在線時(shí),QQ中朋友的頭像就會(huì)顯示在線,根據(jù)提示就可以發(fā)送信息,如果對(duì)方登記了尋呼機(jī)或開(kāi)通了GSM手機(jī)短消息,即使離線了,您也可及時(shí)將信息傳遞給您的好友。雖然以上這些軟件是免費(fèi)的,并且功能越來(lái)越強(qiáng)大。但是它們的唯一的不足就是必須要聯(lián)網(wǎng)或者下載到它們的服務(wù)端,要不然是沒(méi)法脫離Intenet使用的。為了能在一個(gè)沒(méi)有連接到Intenet的局域網(wǎng)使用聊天工具,那就必須要有服務(wù)器端。本系統(tǒng)就是包括服務(wù)器端與客戶端,可以在局域網(wǎng)聊天的一個(gè)工具。2. 系統(tǒng)分析2.1可行性分析1)經(jīng)濟(jì)可行性:本系統(tǒng)需要一個(gè)oracle數(shù)據(jù)庫(kù)服務(wù)器,由于使用人數(shù)比較少,安裝一個(gè)免費(fèi)的oracle數(shù)據(jù)庫(kù)完全可以應(yīng)付需要,所以成本就不用考慮了。 2)操作可行性:只要一臺(tái)以上計(jì)算機(jī)連接在同一個(gè)局域網(wǎng)內(nèi),本系統(tǒng)就可以安裝使用,所以操作上完全不存在問(wèn)題。 3)技術(shù)可行性:本系統(tǒng)采用Java語(yǔ)言,是基于CS架構(gòu)的。開(kāi)發(fā)這個(gè)系統(tǒng)需要開(kāi)發(fā)者對(duì)socket編程和java Swing這兩方面的技術(shù)比較熟。由于本人長(zhǎng)期從事于java語(yǔ)言編程,所以技術(shù)方面是可行的。2.2需求分析2.2.1功能分析本系統(tǒng)要實(shí)現(xiàn)的功能如下:1)注冊(cè)服務(wù)器收到用戶的注冊(cè)請(qǐng)求,便開(kāi)始接受客戶傳遞的信息,諸如客戶的呢稱,性別,籍貫,個(gè)人資料等,接受完畢后,便通過(guò)Jdbc-Odbc與后臺(tái)數(shù)據(jù)庫(kù)連接,然后向數(shù)據(jù)庫(kù)添加記錄,如果成功,便向客戶返回其號(hào)碼??蛻羰盏椒?wù)器返回的信息后,便打開(kāi)主登陸窗口。2)登陸在客戶端,用戶輸入其號(hào)碼和密碼,然后建立與服務(wù)器的連接,告訴服務(wù)器我要登錄,服務(wù)器收到后,開(kāi)始通過(guò)JdbcOdbc讀取數(shù)據(jù)庫(kù),然后與用戶輸入的信息比較,如果成功,便打開(kāi)主程序窗口。然后客戶向服務(wù)器請(qǐng)求讀取好友名單,服務(wù)器收到該請(qǐng)求,開(kāi)始讀取數(shù)據(jù)庫(kù)中的表,得到好友的號(hào)碼后,再在icq表中讀取好友資料,然后向客戶端發(fā)送這些信息,客戶收到后就在主窗口顯示好友,并且建立幾個(gè)矢量(Vector)用以存儲(chǔ)好友的呢稱,號(hào)碼。3)私聊私聊就是兩個(gè)聊天??蛻舳耸紫劝l(fā)送消息到服務(wù)器端,服務(wù)器端根據(jù)發(fā)送人信息和接收者信息來(lái)轉(zhuǎn)發(fā)。例如服務(wù)器接收到一個(gè)A發(fā)給B的消息,先判斷B是否已經(jīng)在線,如果在線就將信息發(fā)送過(guò)去。B接收到A發(fā)來(lái)的信息,如果是未建立對(duì)話窗口,就詢問(wèn)是否建立對(duì)話,否則就丟棄信息。4)群聊群聊,就是多人一起聊天。過(guò)程與私聊差不多。唯一的不同就是服務(wù)器會(huì)將信息轉(zhuǎn)發(fā)給指定群的所有成員。5)創(chuàng)建分組用戶注冊(cè)以后默認(rèn)的好友分組只有一個(gè)。用戶在執(zhí)行添加分組操作以后,客戶端分將一個(gè)這個(gè)動(dòng)作的信息發(fā)送給服務(wù)器端(主要是FromClientlisten)。服務(wù)器端的fromClientListen接收到這個(gè)請(qǐng)求,會(huì)進(jìn)行數(shù)據(jù)庫(kù)操作,將要添加的分組信息插入到數(shù)據(jù)庫(kù)中。如果成功,則返回這個(gè)分組的信息給客戶端,否則返回錯(cuò)誤提示信息。6)創(chuàng)建群用戶注冊(cè)以后群個(gè)數(shù)為0。用戶在執(zhí)行添加群操作以后,客戶端分將一個(gè)這個(gè)動(dòng)作的信息發(fā)送給服務(wù)器端(主要是FromClientlisten)。服務(wù)器端的fromClientListen接收到這個(gè)請(qǐng)求,會(huì)進(jìn)行數(shù)據(jù)庫(kù)操作,將要添加的群信息插入到數(shù)據(jù)庫(kù)中。如果成功,則返回這個(gè)群的信息給客戶端,否則返回錯(cuò)誤提示信息。7)查找好友并加為好友輸入要查找的用戶ID號(hào),客戶端發(fā)送一個(gè)查詢信息給服務(wù)器端,如果找到就返回用戶服務(wù)信息。打開(kāi)一個(gè)用戶信息顯示界面,該界面會(huì)提供一個(gè)“添加為好友”按鈕,點(diǎn)擊后可將此人加為好友。如果未找到,彈出一個(gè)信息提示框。8)查找群并加入群輸入要查找的群ID號(hào),客戶端發(fā)送一個(gè)查詢信息給服務(wù)器端,如果找到就返回用戶服務(wù)信息。打開(kāi)一個(gè)群信息顯示界面,該界面會(huì)提供一個(gè)“加入此群”按鈕,點(diǎn)擊后可將此人加為好友。如果未找到,則彈出一個(gè)信息提示框。9)文件共享在啟動(dòng)文件傳輸服務(wù)器的共享文件功能之前,要設(shè)置它的IP號(hào)和端口,如果設(shè)置不好。好友將無(wú)法下看到這些共享的文件。還有一個(gè)重要的步驟就是添加共享文件或目錄。最后啟動(dòng)文件共享。10)下載文件使用文件傳輸?shù)目蛻舳艘_配置好服務(wù)器的IP和端口號(hào),以及下載好的文件的存放目錄。如果其中之一配置不好,文件下載將會(huì)失敗。設(shè)置好以后,點(diǎn)擊“連接”按鈕,如果配置正確,這時(shí)將會(huì)看到服務(wù)器共享的文件。目前不能支持文件夾下載,當(dāng)看到一個(gè)文件夾以后,可以雙擊該文件夾并查看文件夾里面的文件。2.2.2性能分析本系統(tǒng)由于采用免費(fèi)的oracle數(shù)據(jù)庫(kù)軟件,連接數(shù)最多不能超過(guò)200,所以并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)的人數(shù)不能超過(guò)200人。2.2.3用例圖圖2-1系統(tǒng)用例圖2.2.4時(shí)序圖客戶登陸、注冊(cè)時(shí)的服務(wù)器端時(shí)序圖 圖2-2注冊(cè)、登陸時(shí)的服務(wù)端的時(shí)序圖本圖說(shuō)明:服務(wù)器接每次與一個(gè)客戶連接以后,就會(huì)去創(chuàng)建一個(gè)監(jiān)聽(tīng)線程。通過(guò)線程來(lái)接收客戶端發(fā)送的所有數(shù)據(jù)。如果要查詢數(shù)據(jù)庫(kù),監(jiān)聽(tīng)線程會(huì)請(qǐng)求獲得一個(gè)數(shù)據(jù)庫(kù)連接.如果數(shù)據(jù)庫(kù)連接已經(jīng)獲得,就把連接交給DBOperation對(duì)象,通過(guò)此對(duì)象可以返回給監(jiān)聽(tīng)線程必要的結(jié)果。最后監(jiān)聽(tīng)線程會(huì)通過(guò)Socket將結(jié)果返回給客戶端。2.2.5活動(dòng)圖1)用戶登陸活動(dòng)圖圖2-3用戶登陸活動(dòng)圖本圖說(shuō)明:首先填寫(xiě)登陸信息,提交以后服務(wù)器會(huì)對(duì)用戶名和密碼進(jìn)行驗(yàn)證。如果不正確,返回一個(gè)提示信息。如果登陸成功,就更新在線狀態(tài)。通知所有好友自己已經(jīng)上線。2)客戶之間的通信活動(dòng)圖圖2-4客戶通信活動(dòng)圖本圖說(shuō)明:短消息發(fā)送以后,服務(wù)器端對(duì)應(yīng)的監(jiān)聽(tīng)線程會(huì)接收到一個(gè)數(shù)據(jù)包。此包中包含接收者的信息,如果接收者在線,數(shù)據(jù)包將會(huì)轉(zhuǎn)發(fā)到接收者。如果不在線,就寫(xiě)入數(shù)據(jù)庫(kù)。3)客戶之間的文件傳送活動(dòng)圖 本圖說(shuō)明:客戶端向服務(wù)器發(fā)送文件下載請(qǐng)求。如果服務(wù)器端同意下載,就讀取文件流并將數(shù)據(jù)流寫(xiě)入到客戶端??蛻舳俗x取到文件名之后,立刻創(chuàng)建一個(gè)新的文件并將讀取的數(shù)據(jù)寫(xiě)入到文件中。客戶端 服務(wù)器端發(fā)送要要下載的文件名創(chuàng)建服務(wù)器端監(jiān)聽(tīng)線程讀取文件流并發(fā)送到客戶端查找文件客戶端監(jiān)聽(tīng)器創(chuàng)建文件并將數(shù)據(jù)流寫(xiě)入文件服務(wù)器端圖2-5文件傳送活動(dòng)圖4)新增好友活動(dòng)圖根據(jù)好友ID號(hào)查找好友,如果此ID存在,就將用戶信息發(fā)送到客戶端。同時(shí)將好友關(guān)系寫(xiě)入到數(shù)據(jù)庫(kù)。客戶端服務(wù)器端是否存在用戶資料填寫(xiě)搜索好友請(qǐng)求監(jiān)聽(tīng)端口(監(jiān)聽(tīng)線程)查詢數(shù)據(jù)庫(kù)返回找到用戶資料監(jiān)聽(tīng)端口(監(jiān)聽(tīng)線程)寫(xiě)入數(shù)據(jù)庫(kù)顯示查找的客戶資料加為好友請(qǐng)求更新好友列表圖2-6新增好友活動(dòng)圖5)刪除好友活動(dòng)圖此圖說(shuō)明:客戶向服務(wù)器發(fā)送刪除好友請(qǐng)求。服務(wù)器接收到刪除好友請(qǐng)求以后,將好友關(guān)系從數(shù)據(jù)庫(kù)中刪除??蛻舳朔?wù)器端刪除好友請(qǐng)求監(jiān)聽(tīng)端口(監(jiān)聽(tīng)線程)更新數(shù)據(jù)庫(kù)更新好友列表圖2-7刪除好友活動(dòng)圖3. 總體設(shè)計(jì) 3.1功能模塊圖本系統(tǒng)主要由由兩個(gè)子系統(tǒng)組成:1)文件傳輸系統(tǒng);2)聊天子系統(tǒng)。文件傳輸系統(tǒng)的功能主要有:1)共享文件;2)查看并下載文件。聊天子系統(tǒng)的功能有:1)注冊(cè);2)登陸;3)添加群;4)查找群5)私聊;6)群聊;7)查看好友資料;8)查找好友;9)添加好友;10)創(chuàng)建好友分組。JICQ(javaQQ通信系統(tǒng))通信(聊天)文件傳輸注冊(cè)登陸私聊群聊查看好友資料查找好友添加好友查找群添加群創(chuàng)建好友分組共享文件查看共享文件并下載圖3-1系統(tǒng)功能模塊圖3.2數(shù)據(jù)庫(kù)設(shè)計(jì)3.2.1 E-R圖QQ用戶表ID賬號(hào)密碼個(gè)性簽名頭像好友分組ID用戶ID號(hào)分組名用戶分組用戶群ID分組ID用戶IDID群ID用戶ID擁有創(chuàng)建擁有創(chuàng)建1111n1n群ID創(chuàng)建人ID群名群公告11留言ID發(fā)信人ID收信人ID擁有內(nèi)容n圖3-3系統(tǒng)E-R圖用戶表(QQUser):屬性:id,account(登陸賬號(hào)),pwd,nickname,sign(個(gè)性簽名),sex,email,head(頭像)關(guān)系: 一個(gè)用戶可以有多個(gè)好友分組。 一個(gè)用戶可以有多個(gè)群。 一個(gè)用戶可以有多條留言。好友分組表(Qqperson_group):屬性:id,userid(創(chuàng)建者ID),name(分組名) 關(guān)系:一條記錄只對(duì)應(yīng)一個(gè)用戶,但是可以擁有多個(gè)組成員。群表(Qqpublic_group):屬性:id,userid(創(chuàng)建者ID號(hào)),name(群名),sign(群公告)關(guān)系:一個(gè)群只有一個(gè)創(chuàng)建者,但是可以擁有多個(gè)群成員。圖3-4系統(tǒng)各表之間的聯(lián)系圖3.2.2表結(jié)構(gòu)設(shè)計(jì)表3-1 客戶信息表(qquser)1自動(dòng)id號(hào)Id整數(shù)2用戶賬號(hào)Account整數(shù)3用戶密碼Pwd字符4用戶昵稱Nickname字符5用戶簽名 sign字符6用戶性別Sex字符7用戶郵箱email字符8用戶頭像Head字符表3-2 Qq消息表(QQMessage)1自動(dòng)IDID整數(shù)2發(fā)信人Account_from整數(shù)3收信人Account_to整數(shù)4發(fā)送內(nèi)容Content字符表3-3 用戶分組表(qqpersongroup)1自動(dòng)IDID整數(shù)2擁有者Iduserid整數(shù)3分組名稱name字符表3-4 公共群表(qqpublic_group)1自動(dòng)IDID整數(shù)2創(chuàng)建人userid整數(shù)3群名稱name整數(shù)4群的公共消息sign字符表3-5 用戶與群的中間表(qquser_publicgroup)1自動(dòng)IDID整數(shù)2加入的群IDgroupid整數(shù)3加入的用戶的IDuserid整數(shù)表3-6 用戶與分組的中間表(QQuser_persongroup)1自動(dòng)IDID整數(shù)2加入的分組的idgroupid整數(shù)3加入分組的用戶的iduserid整數(shù)以上各表創(chuàng)建的代碼如下:1)創(chuàng)建用戶表create table qquser(number primary key,account number unique,nickname varchar(100),sign varchar(500),sex varchar(10),email varchar(100),head varchar(200);2)創(chuàng)建分組表create table qqperson_Group(id number primary key,userid references qquser(id),name varchar(100);3)創(chuàng)建群表create table qqpublic_group(id number primary key,userid number references qquser(id),name varchar(100),sign varchar(800);4)創(chuàng)建消息表create table qqmessage(id number primary key,account_from number,account_to number,content varchar(1000);5)創(chuàng)建用戶與群的中間表create qquser_publicgroup (id number primary key,groupid number references qqpublic_group(id) ,userid references qquser(id););6)創(chuàng)建用戶與分組的中間表create qquser_persongroup(id number primary key,groupid number references qqpublic_group(id) ,userid references qquser(id);7)為用戶表插入數(shù)據(jù)insert into qquser values(1,1,long,Im long,male,,48.gif);insert into qquser values(2,2,a,aa,male,,48.gif);insert into qquser values(3,3,b,bb,male,,48.gif);insert into qquser values(4,4,c,cc,male,,48.gif);insert into qquser values(5,5,d,dd,male,,48.gif);8)為分組表和群表插入數(shù)據(jù)insert into qqperson_group values(1,1,my friend);into qqpublic_group values(1,1,ha ha,my new group);9)為用戶與群中間表插入數(shù)據(jù)insert into qqperson_group(1,1,1);insert into qqperson_group(1,1,2);insert into qqperson_group(1,1,3);insert into qqperson_group(1,1,4);insert into qqperson_group(1,1,5);10)為用戶與分組中間表加入數(shù)據(jù)insert into qqpublic_group(1,1,1);insert into qqpublic_group(1,1,2);insert into qqpublic_group(1,1,3); into qqpublic_group(1,1,4);insert into qqpublic_group(1,1,5);3.3類圖圖3-2系統(tǒng)類圖Socket:非自定義類,.Socket。Thread: 非自定義類,java.util.Thread。Client:負(fù)責(zé)具體發(fā)送和接收數(shù)據(jù)。FromServerListen:監(jiān)聽(tīng)服務(wù)器是否在發(fā)送數(shù)據(jù)。MainFrame系統(tǒng)的主界面(包括用戶列表等)。QQUserInfo包括用戶的好友分組信息和群信息。QQUserClass包括用戶的個(gè)人信息,如ID、用戶名等。4. 詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)4.1界面設(shè)計(jì) 1)登陸界面本界面需要填寫(xiě)的有兩個(gè),一個(gè)是用戶賬號(hào),另一個(gè)是用戶密碼。在客戶端,用戶輸入其號(hào)碼和密碼,然后建立與服務(wù)器的連接,告訴服務(wù)器我要登錄,服務(wù)器收到后,開(kāi)始通過(guò)Jdbc方式讀取數(shù)據(jù)庫(kù),然后與用戶輸入的信息比較,否則返回錯(cuò)誤,如果客戶收到成功信息就打開(kāi)主窗口,否則提示出錯(cuò)。如果成功,便打開(kāi)主程序窗口。然后客戶向服務(wù)器請(qǐng)求讀取好友名單,服務(wù)器收到該請(qǐng)求,開(kāi)始讀取數(shù)據(jù)庫(kù)中的friend表,得到好友的號(hào)碼后,再在好友表中讀取好友資料,然后向客戶端發(fā)送這些信息,客戶收到后就在主窗口顯示好友,并且建立幾個(gè)Vector用以存儲(chǔ)好友的信息。圖4-1 登陸界面圖2)注冊(cè)界面本界面要填寫(xiě)的項(xiàng)目包括:用戶昵稱,密碼,郵件地址,個(gè)性簽名。需要選擇的項(xiàng)目包括:性別,頭像。本界面主要負(fù)責(zé)將用戶的信息包裝成一個(gè)QQUserClass對(duì)象。注冊(cè)按鈕一旦被點(diǎn)擊,就會(huì)試圖創(chuàng)建一個(gè)與服務(wù)器端的連接。連接創(chuàng)建成功就會(huì)將填寫(xiě)的信息發(fā)送到服務(wù)器端。如果服務(wù)器寫(xiě)入數(shù)據(jù)庫(kù)成功,就回返回一個(gè)賬號(hào)。使用這個(gè)賬號(hào),用戶可以登陸到系統(tǒng)中。圖4-2 注冊(cè)界面圖3)主界面主界面是系統(tǒng)的核心部分。它可以列出所有好友和客戶所有加入的群,也可以提供共享文件和文件下載功能。如果用戶服務(wù)雙擊好友分組或群,好友列表或群成員列表將會(huì)顯示出來(lái)。雙擊一個(gè)好友,可以與他進(jìn)行私聊。雙擊一個(gè)群成員,可以與群里的所有成員對(duì)話。本界面還提供了以下右鍵菜單:添加好友分組、查找好友并加為好友、查找群并加為群、創(chuàng)建群、移動(dòng)好友到其它分組、查看好友資料、查看群資料。圖4-3 系統(tǒng)主要界面圖4)個(gè)人資料界面該界面主要顯示某個(gè)用戶信息,包括用戶的賬號(hào),昵稱,性別,個(gè)性簽名,用戶等級(jí)等。本界面還提供了一個(gè)“加為好友”按鈕,如果點(diǎn)擊它,此人將會(huì)被加為用戶的好友。默認(rèn)的是加到第一個(gè)好友列表,不過(guò)也可以移動(dòng)其它好友分組。圖4-4 查看好友資料圖5)文件傳輸服務(wù)器端界面該界面使用的步驟為:第一步:設(shè)置好服務(wù)器的IP,端口。IP一定要是本機(jī)的IP,如果是單機(jī)測(cè)試,IP可以填寫(xiě)“”。端口號(hào)盡量不要小于2000,小于兩千的端口可能被系統(tǒng)占用。設(shè)置完后點(diǎn)擊“確定”按鈕。第二步:添加共享文件。單擊“添加文件共享”按鈕,將需要共享的文件或文件夾添加到共享列表中。第三步:點(diǎn)擊“啟動(dòng)文件發(fā)送服務(wù)”。第四步:如果共享文件完畢,需要點(diǎn)擊“退出”。圖4-5 文件傳送服務(wù)器6)文件傳輸客戶端界面使用文件傳輸?shù)目蛻舳艘_配置好服務(wù)器的IP和端口號(hào),以及下載好的文件的存放目錄。如果其中之一配置不好,文件下載將會(huì)失敗。設(shè)置好以后,點(diǎn)擊“連接”按鈕,如果配置正確,這時(shí)將會(huì)看到服務(wù)器共享的文件。目前不能支持文件夾下載和多文件下載,當(dāng)看到一個(gè)文件以后,可以雙擊該文件夾并查看文件夾里面的文件。圖4-6 文件傳送客戶端7)私聊界面本界面主要用來(lái)顯示兩個(gè)人的對(duì)話信息以及發(fā)送信息。發(fā)送的信息可以設(shè)置字體,大小,字體顏色。也可以發(fā)送一個(gè)QQ表情。圖4-7私聊界面圖8)群聊界面本界面主要用來(lái)顯示多人的對(duì)話信息以及發(fā)送信息。發(fā)送的信息可以設(shè)置字體,大小,字體顏色。也可以發(fā)送一個(gè)QQ表情。右邊顯示的是群公告,可以用來(lái)公布一些必要的信息。圖4-8群聊天界面4.2數(shù)據(jù)輸入輸出設(shè)計(jì)4.2.1數(shù)據(jù)輸入登陸界面數(shù)據(jù)的輸入要求Number(賬號(hào))輸入的必須是整型,它是一個(gè)用戶登陸的賬號(hào)。Password(密碼)可以是你設(shè)置好的字符串,字符串內(nèi)容可以隨便。如果用戶設(shè)置不正確,將會(huì)導(dǎo)致登陸不成功,系統(tǒng)會(huì)彈出相應(yīng)的對(duì)話框。注冊(cè)界面的輸入Nickname(昵稱),password(密碼),sign(個(gè)性簽名)可以是任意的字符串。 Email必須是Email地址格式,也就是中間必須含有“”,否則提示輸入不正確。共享界面的輸入服務(wù)器IP:填入本機(jī)的IP地址,格式如:53端口號(hào):隨便一個(gè)可以未被占用的端口都行(最好是2000以上)。4.2.2數(shù)據(jù)輸出用戶注冊(cè)的信息必須寫(xiě)入數(shù)據(jù)庫(kù)中。下載的文件存放到的指定的目錄中,如果未指定就存放到默認(rèn)路徑中,當(dāng)默認(rèn)路徑不存在的時(shí)候給提示用戶路徑不存在。4.3代碼實(shí)現(xiàn)4.3.1服務(wù)器端設(shè)計(jì) 連接池的設(shè)計(jì)連接池,就是生產(chǎn)一定數(shù)量的數(shù)據(jù)庫(kù)連接存儲(chǔ)在一個(gè)容器中,等待程序來(lái)索取,當(dāng)這個(gè)容器器中的數(shù)據(jù)庫(kù)連接全部被使用完的時(shí)候,就立即再產(chǎn)生指定數(shù)量的數(shù)據(jù)庫(kù)連接。這樣做的優(yōu)點(diǎn)就是可以充分利用資源,減少創(chuàng)建和關(guān)閉所帶來(lái)的資源消耗。在程序中它是以一個(gè)集合來(lái)存儲(chǔ)這些連接的。如果訪問(wèn)的程序過(guò)多,而連接又少,連接池可以迅速增加多個(gè)連接以供程序需求。如果連接需求量超出連接池所設(shè)定的最高值。連接池將不理會(huì)程序的請(qǐng)求。連接池主要由以下幾個(gè)類創(chuàng)建:(1)poolSperties 該文件的內(nèi)容如下:poolname=QQPooluser=rootpassword=rooturl=jdbc:mysql:/:3306/javaqqdriver=org.gjt.mm.mysql.Driverminconn=5reuse=20maxconn=1000logfile=c:/QQPool.log第一行聲明要?jiǎng)?chuàng)建的數(shù)據(jù)庫(kù)連接池的名字。第二行是訪問(wèn)數(shù)據(jù)庫(kù)的用戶名。第三行是訪問(wèn)數(shù)據(jù)庫(kù)的密碼。第四行是訪問(wèn)(mysql)數(shù)據(jù)庫(kù)的url。第五行是聲明驅(qū)動(dòng)程序所在的類全名。第六行設(shè)定了數(shù)據(jù)庫(kù)連接池中最少應(yīng)保持的連接數(shù)。第七行設(shè)定了一個(gè)連接(Connection)最多可重復(fù)使用的次數(shù)。第八行設(shè)定了連接池是最多創(chuàng)建的連接數(shù)。第九行聲明了一個(gè)日志文件(該日志文件記錄的是數(shù)據(jù)庫(kù)連接方面的信息)存放的路徑。(2)GetPoolSet.java,本程序的主要功能是獲取上一配置文件中的信息,并將獲得的信息返回給其他程序。由于代碼過(guò)多,本文并不列出源代碼只以表格的形式說(shuō)明各方法的作用。表4-1 GetPoolSet類的方法說(shuō)明方法名作用public void setFileName(String fileName1)設(shè)置將要訪問(wèn)的配置文件public GetPoolSet()創(chuàng)建一個(gè)空的獲取配置文件中信息的對(duì)象 public GetPoolSet(String fileName1)根據(jù)fileName1創(chuàng)建一個(gè)能獵取配置文件中信息的對(duì)象public String getSet(String name)從配置文件取得信息,并返回給調(diào)用程序(3)LogFile.java 本類主要用于記錄日志信息,當(dāng)程序出現(xiàn)異常的時(shí)候就會(huì)調(diào)用此類的方法將出錯(cuò)信息寫(xiě)如日志文件。(4)ConnectionPool.java 本程序主要用于創(chuàng)建數(shù)據(jù)庫(kù)連接。表4-2 ConnectionPool的方法說(shuō)明方法名作用public ConnectionPool(GetPoolSet poolset)構(gòu)造器,它創(chuàng)建一個(gè)ConnectionPool對(duì)象public Connection createConnection(GetPoolSet poolset) 真正創(chuàng)建ConnectionPool對(duì)象的方法public Connection getConnection()獲得連接public void freeConnection(Connection conn)釋放連接,返回給連接池public void check()檢查連接是否還正常public void release()關(guān)閉連接(5)PoolManager.java連接池管理,和對(duì)外交互的類,決定連接池的生產(chǎn)與銷毀。表4-3PoolManager類的方法的說(shuō)明方法名作用synchronized public static PoolManager getInstance(String setfile)返回某個(gè)連接池的管理對(duì)象synchronized public static PoolManager getInstance()返回默認(rèn)的連接池管理對(duì)象private PoolManager(GetPoolSet poolset1)構(gòu)造器,創(chuàng)建連接池管理對(duì)象private ConnectionPool createPool(GetPoolSet poolset)創(chuàng)建連接池public Connection getConnection()獲得連接public void freeConnection(Connection connection1)釋放連接public void closemypool()關(guān)閉連接池public void release()關(guān)閉所有的連接池 服務(wù)器端監(jiān)聽(tīng)線程的設(shè)計(jì)服務(wù)器在監(jiān)聽(tīng)到一個(gè)客戶以后,它就會(huì)創(chuàng)建一個(gè)線程去管理這個(gè)客戶。至于如何去管理這個(gè)客戶,服務(wù)器端不做任何干涉,完全由監(jiān)聽(tīng)線程決定。監(jiān)聽(tīng)線程主要對(duì)客戶端的請(qǐng)求進(jìn)行響應(yīng),做到有求必應(yīng)。接收到信息后,首先判斷該信息是哪種類型,如果是要訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器,則直接根據(jù)發(fā)送信息內(nèi)容操作數(shù)據(jù)庫(kù)。如果是聊天內(nèi)容,服務(wù)器會(huì)將該信息再次轉(zhuǎn)發(fā)到目的地。這些判斷將會(huì)全放部在一個(gè)線程的run方法中。4.3.2傳遞包的設(shè)計(jì)由于請(qǐng)求的服務(wù)不同,包的類型應(yīng)該所區(qū)別。所以在設(shè)計(jì)的時(shí)候,應(yīng)該在包中加一個(gè)存儲(chǔ)包類型的屬性并提供設(shè)置和獲取這個(gè)屬性的方法。以下就是對(duì)包抽象出來(lái)的應(yīng)該有的方法,所有要傳輸?shù)姆椒ū仨殞?shí)現(xiàn)以下接口中的方法:package javaqq.datagram;import java.io.Serializable;public interface DatagramPacket extends Serializable / define class number for the packet which need to send to otherspublic static final int MESSAGESHOW_PIC_PERSONAL = 1;public static final int MESSAGESHOW_PHOTO = 2;public static final int MESSAGESHOW_WORD_PERSONAL = 3;public static final int MESSAGESHOW_WORD_GROUP = 4;public static final int MESSAGESHOW_PIC_GROUP = 5;/ define class number for the packet which not need to send to otherspublic static final int DATABASEHANDLE_FIND = 11;public static final int DATABASEHANDLE_DEAL = 12;public static final int DATABASEHANDLE_RESULT = 13;public static final int DATABASEHANDLE_FLAG = 14;public static final int USER_INFO = 21;public static final int USER_LOGIN = 22;public static final int USER_REGISTER = 23;public static final int USER_REGISTERINFO = 24;/find infomationpublic static final int FIND_USER=31;public static final int RETURN_USERINFO=32;public static final int FIND_GROUP=33;public static final int RETURN_GROUPINFO=34;public static final int JOIN_GROUP=35;public static final int RETURN_GROUPMEMBERS=36;/ system informationpublic static final int SYSTEM_INFO = 91;public static final int SYSTEM_ON_OR_OFFLINE = 92;public int getType();public Object getData();public long getFromuserid();/ if (getTouerid()=0),then the datapacket will be sended to serverpublic long getTouserid();public String getTalkroomid();服務(wù)器在接收包的時(shí)候,就調(diào)用它的getType()獲得type的值,并采取相應(yīng)的措施。4.3.3聊天客戶端設(shè)計(jì)聊天窗口發(fā)送文件文字與圖片的代碼如下:/發(fā)送文字public void insertString(String s, SimpleAttributeSet attributset) Try doc.insertString(doc.getLength(), s, attributset);doc.insertString(doc.getLength(), n, null);showScroll.getVerticalScrollBar().setValue(showScroll.getVerticalScrollBar().getMaximum()+20);showText.setCaretPosition(showText.getDocument().getLength(); catch (BadLocationException e)e.printStackTrace();/發(fā)送圖片public void insertIcon(String str) String picurl = TalkFrame.class.getResource(pic).getPath()+ File.separator;try ImageIcon icon = new ImageIcon(picurl + str);showText.setCaretPosition(doc.getLength();showText.insertIcon(icon);doc.insertString(doc.getLength(), n, null);showScroll.getVerticalScrollBar().setValue(showScroll.getVerticalScrollBar().getMaximum();catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();4.3.4文件傳輸設(shè)計(jì)文件傳輸客戶端設(shè)計(jì)從Socket中讀取數(shù)據(jù),并將數(shù)據(jù)寫(xiě)入到文件中,代碼如下: while (!stop) int read = 0;if (getDis() != null) read = getDis().read(buf); / 將數(shù)據(jù)讀入緩沖區(qū),并返回讀取數(shù)據(jù)長(zhǎng)度 System.out.println(read + read); ElseSystem.out.println(數(shù)據(jù)輸入流不存在!);break;if (read = -1) fileOut.close();break;System.out.println(read);received += read;System.out.println(寫(xiě)數(shù)據(jù)一次);/ 將緩沖區(qū)中的數(shù)據(jù)寫(xiě)入文件中fileOut.write(buf, 0, read); / while文件傳輸服務(wù)端設(shè)計(jì)從文件中讀取數(shù)據(jù),并將數(shù)據(jù)發(fā)送到客戶端,代碼如下:while (!isStop() int read = 0;if (fis != null) read = fis.read(buf); / 從文件讀取部分字節(jié)數(shù)據(jù)到buf緩沖區(qū)中System.out.println(read: + read);if (read = -1) / 若讀到文件結(jié)尾,退出break;dos.write(buf, 0, read); / 將buf緩沖區(qū)中的數(shù)據(jù)寫(xiě)入網(wǎng)絡(luò)輸出流dos.flush();5 系統(tǒng)測(cè)試5.1注冊(cè)測(cè)試輸入以下信息:圖5-1注冊(cè)填寫(xiě)圖 得到:(登陸賬號(hào):46)圖5-2返回注冊(cè)賬號(hào)圖5.2登陸測(cè)試輸入以下信息:(賬號(hào):1,密碼:123)圖5-3登陸填寫(xiě)圖 登陸成功的結(jié)果:圖5-4登陸成功后的主界面圖5.3私聊測(cè)試1)首
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)安全產(chǎn)品研發(fā)IT人員保密合同示例
- 出租車司機(jī)職業(yè)發(fā)展規(guī)劃與培訓(xùn)合同范本
- 玻璃采光帶施工安裝及節(jié)能改造合同
- 老北京介紹課件
- 實(shí)驗(yàn)室安全操作規(guī)程完整
- 質(zhì)量部安全生產(chǎn)職責(zé)內(nèi)容
- 安全生產(chǎn)法于起施行
- 2025年餐飲工作總結(jié)
- 汽車維修知識(shí)培訓(xùn)課件
- 羊年函授技術(shù)課件
- 譯林版六年級(jí)上冊(cè)英語(yǔ)1-8單元-單元測(cè)試卷(含答案)sc
- 貴州省貴陽(yáng)市2023-2024學(xué)年七年級(jí)下學(xué)期期末考試生物試題(無(wú)答案)
- 廣東省湛江市2023-2024學(xué)年高二下學(xué)期7月期末考試化學(xué)試題
- 河南省周口市恒大中學(xué)2023-2024學(xué)年高二下學(xué)期7月期末考試數(shù)學(xué)試題
- 河南省鄭州市2023-2024高一下學(xué)期期末考試數(shù)學(xué)試卷及答案
- 黑龍江省哈爾濱市2024年七年級(jí)下學(xué)期生物期末試卷附答案
- 山東省鄒城市一中2024年高一數(shù)學(xué)第二學(xué)期期末檢測(cè)試題含解析
- 2022-2023學(xué)年廣西壯族自治區(qū)河池市高一下學(xué)期期末考試數(shù)學(xué)試題(解析版)
- REACH物質(zhì)管理協(xié)議書(shū)
- DBJ-T 15-30-2022 鋁合金門窗工程技術(shù)規(guī)范
- 供應(yīng)商審核自查表+自評(píng)回復(fù)模版BYD
評(píng)論
0/150
提交評(píng)論