【正文】
位好友后再右擊鼠標(biāo),出現(xiàn)功能選項(xiàng)(如圖 45),點(diǎn)擊“發(fā)送即時(shí)消息”,即可打開(kāi)一對(duì)一聊天界面(如圖 47)。 本科畢業(yè)設(shè)計(jì) 31 消息彈窗 界面 使用了 JTextArea 組件, 并 沿用了登錄窗口的背景圖片。 [聊天室聊天 ]模塊分析 正如 的群功能一樣,本系統(tǒng)也模擬了一個(gè)群聊天的功能。 文件對(duì)話(huà)框界面的實(shí)現(xiàn)是基于第三方包,代碼中使用了 JFileChooser 對(duì)象,通過(guò)調(diào)用該對(duì)象的 showSaveDialog 和 showOpenDialog 方法來(lái)實(shí)現(xiàn)打開(kāi)文件對(duì)話(huà)框和保存文件對(duì)話(huà)框。 本科畢業(yè)設(shè)計(jì) 34 // equalsIgnoreCase()將此 String 與另一個(gè) String 比較,不考慮大小寫(xiě)。 } ()。 s=()。 (new File((16)))。 int a=0。 } 后臺(tái)管理模塊功能實(shí)現(xiàn) [后臺(tái)管理 ]模塊分析 作為用戶(hù)我們只是使用了 的客戶(hù)端功能,即我們電腦上安裝的 軟件。日期、時(shí)間的顯示是 通過(guò) Calendar 對(duì)象獲取系統(tǒng)當(dāng)前日期時(shí)間 來(lái)實(shí)現(xiàn)的 。例如 3 號(hào)用戶(hù) “mj”給沒(méi)有上線(xiàn)的 1 號(hào)用戶(hù) “niaopeng”發(fā) 送消息后,消息內(nèi)容會(huì)存儲(chǔ)到數(shù)據(jù)庫(kù)中的 msg表中。這種搜集和學(xué)習(xí)相關(guān)知識(shí)的方法和經(jīng)歷對(duì)自己以后做課題研究有很大的啟發(fā)意義。系統(tǒng)開(kāi)發(fā)過(guò)程中我 學(xué)習(xí)了 使用 MySQL 進(jìn)行數(shù)據(jù) 庫(kù) 建表的相關(guān)知識(shí),受益很多。 離線(xiàn)消息推送。所有的文件不都可以轉(zhuǎn)化為二進(jìn)制的字節(jié)流嗎,這樣就可以實(shí)現(xiàn)底層的數(shù)據(jù)傳輸了。這次的畢業(yè)設(shè)計(jì)確實(shí)讓我學(xué)到了很多知識(shí)。需要分別打包,分別在機(jī)器上安裝配置。 系統(tǒng)源程序清單及說(shuō)明 包:編寫(xiě)客戶(hù)端的一些通用組件 包:編寫(xiě)客戶(hù)端的一些控制流程,如注冊(cè)、登錄、聊天等等 包:編寫(xiě)客戶(hù)端的界面 包:存放系統(tǒng)用到的圖片 包:存放客戶(hù)端網(wǎng)絡(luò)通信相關(guān)的程序 包:存放一些工具的包,如本系統(tǒng)中的界面居中、界面風(fēng)格設(shè)置等功能。尤其是在我一邊忙著考研一邊做畢業(yè)設(shè)計(jì)的過(guò)程中,更是給予我莫大的鼓舞和幫助,最后使得我 的畢業(yè)設(shè)計(jì)能夠順利的完成。 當(dāng)然功能越想越多,有的是技術(shù)問(wèn)題,有的是時(shí)間問(wèn)題,總而言之期待以后完善。如何將不同格式的文件發(fā)送給對(duì)方也讓我一籌莫展。客戶(hù)端有時(shí)是請(qǐng)求登錄驗(yàn)證,有時(shí)是請(qǐng)本科畢業(yè)設(shè)計(jì) 40 求返回好友列表,有時(shí)是請(qǐng)求發(fā)送 文字消息給對(duì)方。數(shù)據(jù)庫(kù)的設(shè)計(jì)使自己學(xué)會(huì)了如何分析用戶(hù)的需求,設(shè)計(jì)出合理規(guī)范的數(shù)據(jù)庫(kù)。盡管這樣 ,我還是做了很多準(zhǔn)備工作,搜集了相關(guān)論文,參閱了相關(guān)書(shū)籍。 圖 414 用戶(hù)管理界面 本科畢業(yè)設(shè)計(jì) 38 (3)離線(xiàn)消息管理 在本系統(tǒng)中如果向?qū)Ψ桨l(fā)送消息是好友離線(xiàn),則消息將會(huì)自動(dòng)保存在服務(wù)器的數(shù)據(jù)庫(kù)上,待好友上線(xiàn)時(shí)再推送過(guò)去。在這里管理員還可以發(fā)送彈窗消息給所有在線(xiàn)用戶(hù),可以發(fā)布群公告。 ()。 ( ().getAbsolutePath())。 if((transfer file)){ if((null, 是否接收文件+(16)+? , 提示 :, )==){ (不接收 )。 String readSignal=。 byte[] b = new byte[512]。 ()。 文件傳送模塊功能實(shí)現(xiàn) [文件傳送 ]模塊分析 正如現(xiàn)在主流的即時(shí)通訊軟件一樣,聊天往往是最最基本的功能,除此之外還有很本科畢業(yè)設(shè)計(jì) 32 多實(shí)用功能,如文件傳送。 上方的工具條和右側(cè)的仿 秀用的是 JLabel 對(duì)象,在 JLabel 中調(diào)用 setIcon 方法 添加不同的背景圖片。右鍵菜單是使用 JPopupMenu 對(duì)象來(lái)實(shí)現(xiàn)的。 } catch (Exception e) { (null, 連接服務(wù)器失敗!請(qǐng)檢查網(wǎng)絡(luò)連接或確保服務(wù)器已啟動(dòng)! )。此界面右上角的關(guān)閉和最小化按鈕全部是用的 ImageIcon對(duì)象,所以外觀不同于 Windows 系統(tǒng)自帶的效果。 String sex = 男 。 本科畢業(yè)設(shè)計(jì) 25 圖 41 注冊(cè)界面 此外,信息填寫(xiě)不完整或填寫(xiě)有誤將有錯(cuò)誤提示,如圖 42。 } } catch (Exception e) { ()。 (o)。 (m)。 if (().equals(123456)) { // 返回成功登錄的消息 (1)。此類(lèi)的 主要代碼如下: MyServer類(lèi): public class MyServer { public MyServer() { try { (服務(wù)器在 8888端口監(jiān)聽(tīng) )。例如在本系統(tǒng)中存在存在兩個(gè)不同的聊天窗口:一對(duì)一聊天、聊天室聊天,其實(shí)不管是哪種方式的聊天在后臺(tái)控制層都可以采用同一個(gè)控制器,不需要因?yàn)榻缑娴牟煌髣?dòng)后臺(tái)的控制代碼,充分利用這一點(diǎn)以提高代碼重用性。 圖 313 程序架構(gòu) 本科畢業(yè)設(shè)計(jì) 20 所謂 MVC模式,即模型 (model)視圖 (view)控制器 (controller)的縮寫(xiě) ,它是一種軟件設(shè)計(jì)規(guī)范,是一種使業(yè)務(wù)邏輯和數(shù)據(jù)顯示分離的代碼組織方法。, `MSG_SENDTIME` date NOT NULL COMMENT 39。 (2) 表 圖 312 msg 表 /*創(chuàng)建 表格 */ CREATE TABLE `msg` ( `MSG_ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 39。個(gè)性簽名 39。性別 39。用戶(hù)名 39。用戶(hù)可以在客戶(hù)端登錄窗口通過(guò)輸入用戶(hù)名和匹配的密碼登錄,用戶(hù)信息中只要有兩者之一與該表內(nèi)容不符便無(wú)法登錄,系統(tǒng)會(huì)給出出錯(cuò)提示。由于本系統(tǒng)功能設(shè)計(jì)理念較為簡(jiǎn)單,因此只包含了兩張數(shù)據(jù)表:用戶(hù)表 (users)和消息表 (msg)。此消息將會(huì)存入數(shù)據(jù)庫(kù),等目標(biāo)用戶(hù)上線(xiàn)后再將消息推送過(guò)去。 傳送文件模塊 在聊天主界面上有文件傳送功能,可以選擇任意的本地文件進(jìn)行雙向傳送。 登錄模塊 用戶(hù)在客戶(hù)端輸入賬號(hào)和密碼, 然后建立與服務(wù)器端的連接,告訴服務(wù)器執(zhí)行登錄操作。 構(gòu) 造 Server 端數(shù)據(jù)輸入流對(duì)象 構(gòu)造 Server 端數(shù)據(jù)輸出流對(duì)象 在數(shù)據(jù)流中發(fā)送、接收客戶(hù)消息 建立客戶(hù)端 Socket 連接 Socket client =new Socket(“ServerHost”,8888)。 ?Java Socket(套接字 )說(shuō)明 在 Java 語(yǔ)言里,使用 Socket(套 接字 )模型來(lái)封裝網(wǎng)絡(luò)傳輸?shù)木唧w動(dòng)作。 本系統(tǒng)在通訊功能實(shí)現(xiàn)中采用了 TCP傳輸協(xié)議,直接使用的 Java API提供的類(lèi) Socket和 Serversocket等來(lái)實(shí)現(xiàn) [6][9]。與其他的大型數(shù)據(jù)庫(kù)例如 Oracle、 DB SQL Server 等相比, MySQL 自有它的不足之處,如規(guī)模小、功能有限等,但是這絲毫也沒(méi)有減少它受歡迎的程度。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。其基本功能有用戶(hù)注冊(cè)、客戶(hù)端登錄、一對(duì)一實(shí)時(shí)聊天、群組聊天、傳送文件、服務(wù)器后臺(tái)管理。 ( 3) 操作可行性:一方面可以讓本地機(jī)同時(shí)作為客戶(hù)端和服務(wù)器實(shí)現(xiàn)一臺(tái)機(jī)器上的即時(shí)通訊。一般來(lái)說(shuō)應(yīng)從以下幾個(gè)方面進(jìn)行論證 [12]: 包括系統(tǒng)總體設(shè)計(jì)、功能模塊劃分、數(shù)據(jù)庫(kù)設(shè)計(jì)和關(guān)鍵類(lèi)的設(shè)計(jì)。雖然即時(shí)聊天系統(tǒng)設(shè)計(jì)的初衷是聊天,但正如前面所說(shuō),其功能已經(jīng)超出了聊天的范疇,隨著企業(yè)即時(shí)通訊工具( EIM)的 出現(xiàn), IM 系統(tǒng)本科畢業(yè)設(shè)計(jì) 2 更是成了企業(yè)信息發(fā)布、資源共享、問(wèn)題探討和網(wǎng)絡(luò)營(yíng)銷(xiāo)的一把利器。不少?gòu)S商分別推出了自己的 IM,如騰訊 、阿里旺旺、新浪 UC、移動(dòng)飛信等,這些都是我們所熟悉的 PC 端的即時(shí)通訊 軟件 。 database。CS 架構(gòu)的即時(shí)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) C/S 架構(gòu)的即時(shí)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 摘要: 隨著信息時(shí)代的飛速發(fā)展 ,尤其是互聯(lián)網(wǎng)技術(shù)的興起 ,使人們愈來(lái)愈傾向于通過(guò)網(wǎng)絡(luò)來(lái)交流、傳遞消息。 關(guān)鍵詞: Java;數(shù)據(jù)庫(kù); Socket 編程;即時(shí)通訊系統(tǒng); TCP/IP 協(xié)議 CS 架構(gòu)的即時(shí)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) The Instant Messaging System based on C/S Structure Abstract: With the rapid development of the information age, especially the rise of inter technology, more and more people tend to municate and deliver the messages through the messaging system is such a widely used medium. With it,the realtime dialogue and file transfer can be easily carried out. Taking the design and development of the instant messaging system as the background , this article describes in detail the process of developing software systems with Java and MySql. The realization of the system is based on the TCP / IP munication protocol, and uses a client / server mode .Many advanced java technologies such as Swing ,java multithreading, JDBC, socket programming and so on are used. By directly using the ServerSocket ,ObjectInputStream and other classes supported in Java API, messages sented by the client and server side are packaged into a uified data stream in order to achieve the exchange of messages. The whole development process of this system follows software engineering methods,and instant messaging, group chatting, file transferring and other functions are realized. Keywords: Java。 從最早的即時(shí)通訊 軟件 ICQ 誕生至今,市場(chǎng)上不斷涌現(xiàn)出類(lèi)似的產(chǎn)品。很難想象一臺(tái)個(gè)人電腦沒(méi)有安裝 像 這樣的即時(shí)通訊軟件。 第二部分,闡述了整個(gè)系統(tǒng)的設(shè)計(jì)過(guò)程。為了達(dá)到這個(gè)目的,必須認(rèn)真了解用戶(hù)的要求及現(xiàn)實(shí)環(huán)境,探索若干種可供選擇的解絕方案,并對(duì)每種解決方案的可行性進(jìn)行仔細(xì)論證。無(wú)需太多的經(jīng)濟(jì)投入即 可為局域網(wǎng)內(nèi)的即時(shí)通訊系統(tǒng)的實(shí)現(xiàn)提供支持。本系統(tǒng)不比商業(yè)系統(tǒng),沒(méi)有考慮過(guò)多的復(fù)雜性,主要實(shí)現(xiàn)了基本的通訊功能,以滿(mǎn)足學(xué)習(xí)研究之用。它 是一個(gè)開(kāi)放源代碼的、基于Java 的可擴(kuò)展開(kāi)發(fā)平臺(tái)。 MySQL 是一種關(guān)聯(lián)數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉(cāng)庫(kù)內(nèi),這樣就增加了速度并提高了靈活性。通過(guò)這些協(xié)議,網(wǎng)絡(luò)通信的本科畢業(yè)設(shè)計(jì) 6 各主機(jī)可以用一種統(tǒng)一而非雜亂的規(guī)范, 高效便捷地相互發(fā)送和接收消息。另外,使用 UDP 傳輸數(shù)據(jù)時(shí)對(duì)數(shù)據(jù)是有大小限制的,每個(gè)被傳輸?shù)陌仨毾薅ㄔ?64KB 之內(nèi) [6]。 Java 中的 Socket 通信流程如 圖 21 所示 。服務(wù)器接收到信息后通過(guò)純 JDBC 方式或者 JDBC—ODBC 橋接的方式連接數(shù)據(jù)庫(kù)并添加記錄。 此外還有群組聊天功能,可以在“官方聊天室”功能中實(shí)現(xiàn)一對(duì)多的聊天,即在聊天室發(fā)送的消息是面向所有在線(xiàn)用戶(hù)的。 (3)消息管理:當(dāng)一個(gè)用戶(hù)給其不在線(xiàn)的用戶(hù)發(fā)送消息時(shí),系統(tǒng)會(huì)理解為發(fā)送的是離線(xiàn)消息。 服務(wù)器管理員 查找用戶(hù) 查看在線(xiàn)用戶(hù) 刪除用戶(hù) 查看聊天記錄 關(guān)閉服務(wù)器 圖 34后臺(tái)管理員用例圖 啟動(dòng)服務(wù)器 ( 1)頂層數(shù)據(jù)流圖 聊天用戶(hù) 聊天用戶(hù) 局域網(wǎng)即時(shí)聊天系統(tǒng) 圖 35 頂層數(shù)據(jù)流圖 ( 2)客戶(hù)端數(shù)據(jù)流圖 本科畢業(yè)設(shè)計(jì) 13