




已閱讀5頁(yè),還剩14頁(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)介
2015屆本科畢業(yè)論文(設(shè)計(jì))基于java技術(shù)的即時(shí)聊天系統(tǒng)實(shí)現(xiàn)姓 名:_ xxxx _系 別:計(jì)算機(jī)與信息技術(shù)學(xué)院專 業(yè): 網(wǎng)絡(luò)安全 _學(xué) 號(hào):_xxxxxxxx_ _指導(dǎo)教師:_ xxxxx _2015年 5月8日目 錄1 緒論11.1 背景11.2 論文研究?jī)?nèi)容與方法12 開發(fā)環(huán)境介紹12.1 java技術(shù)簡(jiǎn)介12.2 開發(fā)工具簡(jiǎn)介13 需求分析13.1 功能性需求分析23.2 非功能性需求分析24 總體設(shè)計(jì)24.1 功能模塊設(shè)計(jì)24.2 數(shù)據(jù)庫(kù)設(shè)計(jì)35 系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)55.1 界面設(shè)計(jì)55.1.1 登錄界面55.1.2 注冊(cè)界面55.1.3 修改密碼界面65.1.4 好友列表界面75.1.5 聊天窗口界面85.1.6 服務(wù)器端界面95.2 功能實(shí)現(xiàn)95.2.1 實(shí)現(xiàn)登錄95.2.2 實(shí)現(xiàn)注冊(cè)95.2.3 實(shí)現(xiàn)修改密碼105.2.4 添加、刪除好友105.2.5 移動(dòng)黑名單115.2.6 多對(duì)多聊天125.2.7 顯示表情125.2.8 文件的發(fā)送135.2.9 歷史記錄136 測(cè)試階段14總 結(jié)14參考文獻(xiàn)15致 謝15基于java技術(shù)的即時(shí)聊天系統(tǒng)實(shí)現(xiàn)摘要基于java技術(shù)的即時(shí)聊天系統(tǒng)采用c/s架構(gòu),myeclipse集成開發(fā)環(huán)境和mysql數(shù)據(jù)庫(kù)為開發(fā)環(huán)境,在window7系統(tǒng)下使用java程序設(shè)計(jì)語(yǔ)言開發(fā)的一款聊天系統(tǒng)。系統(tǒng)主要分為:用戶注冊(cè)、用戶登錄、修改密碼、好友列表、聊天等五大模塊;在功能上用戶能夠進(jìn)行添加刪除好友,移動(dòng)黑名單,一對(duì)一、多對(duì)多的聊天,發(fā)送表情,傳送文件等操作。關(guān)鍵詞java;即時(shí)聊天系統(tǒng);c/s;myeclipse;mysql; implementation of instant messaging system based on java technologyabstractjava technology and c/s architecture is used in the instant messaging system,the myeclipse integrated development environmentandmysql database as a development environment based onjava programming language,the use of window7 system in the developmentof achat system. the systemis mainly divided into:user registration,user login,change password,list of friends,chat and otherfive modules;in function,users canadd and delete friends,mobileblacklist,one to one,many to many chat,send expression,transfer files and otheroperations.keywordsjava; instant messaging system; c/s ;myeclipse;mysql;16商丘師范學(xué)院2015屆本科畢業(yè)論文(設(shè)計(jì))1 緒論1.1 背景隨著互聯(lián)網(wǎng)的蓬勃發(fā)展,即時(shí)聊天已經(jīng)成為如今最流行的通訊方式,尤其在移動(dòng)互聯(lián)網(wǎng)方面,即時(shí)聊天已經(jīng)與我們的生活息息相關(guān)。同時(shí),java是一種非常流行的程序設(shè)計(jì)語(yǔ)言,可以用來(lái)開發(fā)面向?qū)ο?、跨平臺(tái)的應(yīng)用程序。 即時(shí)聊天已經(jīng)與我們的生活不可分割,利用自己學(xué)習(xí)到的java語(yǔ)言開發(fā)一款自己的聊天軟件是一個(gè)非常不錯(cuò)的選擇,既能夠檢驗(yàn)自己對(duì)java技術(shù)的掌握,同時(shí)又能夠開發(fā)一款自己的聊天軟件。1.2 論文研究?jī)?nèi)容與方法基于java技術(shù)的聊天系統(tǒng)主要是探索如何在java技術(shù)下能夠?qū)崿F(xiàn)即時(shí)聊天的一些基本功能:用戶注冊(cè),用戶登錄,添加刪除好友,移動(dòng)黑名單,實(shí)現(xiàn)一對(duì)一、多對(duì)多的聊天,能夠發(fā)送表情,傳送圖片、視頻等1。論文的設(shè)計(jì)主要采用了兩種研究方法:一是文獻(xiàn)資料研究的方法。在研究聊天系統(tǒng)現(xiàn)實(shí)中,本人通過(guò)圖書館、電子圖書館學(xué)習(xí)了java語(yǔ)言中的一些編程技術(shù);二是理論與實(shí)際相結(jié)合,既然掌握了技術(shù)與方法,那么就應(yīng)該快速的進(jìn)行實(shí)踐,在軟件的設(shè)計(jì)過(guò)程中,才能夠理解到理論與現(xiàn)實(shí)的差距,遇到棘手問(wèn)題,應(yīng)該快速查閱資料快速攻破。2 開發(fā)環(huán)境介紹本聊天系統(tǒng)是基于java技術(shù)的,采用c/s結(jié)構(gòu),采用mvc的開發(fā)框架,利用myeclipse、mysql數(shù)據(jù)庫(kù)作為開發(fā)工具。2.1 java技術(shù)簡(jiǎn)介java是一種程序設(shè)計(jì)語(yǔ)言, 主要應(yīng)用于android 應(yīng)用、jsp網(wǎng)站、pc和游戲控制臺(tái)等領(lǐng)域。java語(yǔ)言能夠使開發(fā)者在設(shè)計(jì)程序的時(shí)候能夠根據(jù)自己的情況自定義數(shù)據(jù)類型和關(guān)聯(lián)操作,對(duì)于程序中的數(shù)據(jù)結(jié)構(gòu)的改變或者代碼的改變進(jìn)行相應(yīng)的操作;java語(yǔ)言編寫的程序編譯后無(wú)需再次編譯,可以在任何硬件設(shè)備下運(yùn)行1。本次課題中主要用到swing工具包中jframe類,采用java和windows混合界面風(fēng)格,作為開發(fā)程序的外觀風(fēng)格來(lái)設(shè)計(jì)聊天系統(tǒng)界面;其次,使用java socket編程技術(shù)實(shí)現(xiàn)系統(tǒng)之間的網(wǎng)絡(luò)通信2。2.2 開發(fā)工具簡(jiǎn)介myeclipse是一種集成開發(fā)軟件。myeclipse的功能強(qiáng)大,可以集成多種語(yǔ)言開發(fā)插件,進(jìn)行相應(yīng)開發(fā)語(yǔ)言的開發(fā)工作。mysql是一個(gè)關(guān)系數(shù)據(jù)庫(kù),底層代碼是c、c+編寫的,通過(guò)編譯測(cè)試達(dá)到代碼的可移植;而且,它支持支持linux、windows、msc os等多種操作系統(tǒng),支持多線程。它的代碼是開源的,用戶可以在其基礎(chǔ)上根據(jù)自己的需要進(jìn)行二次開發(fā);mysql的體積小、速度快、成本低,因此一些小型網(wǎng)站的開發(fā)都選擇 mysql 作為其網(wǎng)站的數(shù)據(jù)庫(kù)。3 需求分析軟件系統(tǒng)的開發(fā)是根據(jù)用戶的需求來(lái)設(shè)計(jì)開發(fā)出用戶需要的軟件系統(tǒng)或者系統(tǒng)中的軟件部分的過(guò)程。項(xiàng)目流程化能夠促進(jìn)項(xiàng)目的監(jiān)管、人員的合理分配。需求分析是指對(duì)即時(shí)聊天系統(tǒng)的功能、非功能進(jìn)行全面分析的過(guò)程,對(duì)以后開發(fā)出來(lái)的軟件應(yīng)該實(shí)現(xiàn)什么樣的功能,具有什么樣的界面以及軟件能夠達(dá)到什么樣的性能等。3.1 功能性需求分析即時(shí)聊天系統(tǒng)在功能上主要能夠?qū)崿F(xiàn)如今人們經(jīng)常用到的各種即時(shí)通訊軟件的一些基本交流聊天的功能,主要的功能性需求如下:1. 登錄界面:注冊(cè)用戶能夠進(jìn)行登錄,通過(guò)連接數(shù)據(jù)庫(kù)進(jìn)行判斷用戶是否能夠進(jìn)入好友列表界面。2. 注冊(cè)界面:用戶可以注冊(cè),注冊(cè)信息可以被添加到數(shù)據(jù)庫(kù),然后用于確定用戶的登錄。3. 好友列表界面:用戶能夠自由添加、刪除好友,移動(dòng)黑名單等;同時(shí)能夠?qū)崿F(xiàn)雙擊好友,能夠進(jìn)入對(duì)應(yīng)好友聊天窗口等4. 聊天界面:能夠?qū)⒘奶斓男畔?、表情等顯示到對(duì)應(yīng)的聊天界面上;能夠發(fā)送文件、音樂(lè)、視頻等;能夠?qū)α奶斓臍v史記錄進(jìn)行簡(jiǎn)單的查看、翻頁(yè)等。5. 修改密碼界面:讓用戶在忘記密碼或者想修改密碼時(shí)候,能夠進(jìn)行修改密碼操作。3.2 非功能性需求分析1. 操作系統(tǒng):windows7旗艦版;2. 硬盤:500g;3. 開發(fā)平臺(tái):myeclipse2014;4. 數(shù)據(jù)庫(kù):mysql。4 總體設(shè)計(jì)軟件設(shè)計(jì)是從軟件的用戶的需求出發(fā),根據(jù)需求分析來(lái)確定軟件系統(tǒng)功能設(shè)計(jì)的整體結(jié)構(gòu),然后劃分各個(gè)功能模塊,最后確定每個(gè)模塊的實(shí)現(xiàn)算法以及編寫具體的代碼,最終形成了軟件的具體設(shè)計(jì)方案3。4.1 功能模塊設(shè)計(jì)根據(jù)系統(tǒng)分析的結(jié)果畫出系統(tǒng)功能模塊圖,對(duì)各個(gè)模塊進(jìn)行細(xì)分,確定模塊相互結(jié)構(gòu)關(guān)系。 圖4- 1系統(tǒng)功能模塊圖4.2 數(shù)據(jù)庫(kù)設(shè)計(jì)通過(guò)用戶的注冊(cè),聊天等形成初步的數(shù)據(jù)需求;對(duì)數(shù)據(jù)需求進(jìn)行概念上的設(shè)計(jì),得到對(duì)應(yīng)的e-r圖;其次選擇合適的方法,將e-r圖轉(zhuǎn)化為關(guān)系模型;然后對(duì)關(guān)系模型進(jìn)行物理設(shè)計(jì)4。1. e-r圖設(shè)計(jì):分析確定各個(gè)數(shù)據(jù)表的字段、數(shù)據(jù)類型、關(guān)系等,畫出e-r圖。 圖4- 2用戶屬性圖4- 3好友屬性圖4- 4歷史記錄屬性2. 物理設(shè)計(jì):根據(jù)系統(tǒng)的數(shù)據(jù)類型,我們可以選擇為數(shù)據(jù)庫(kù)表中字段最合適的數(shù)據(jù)類型,字段大小,索引結(jié)構(gòu)等5。表4- 1用戶信息表序列號(hào)字段描述類型空額外1id用戶編號(hào)int(11)否主鍵(自增)2name用戶名varchar(16)否3zhanghao用戶帳號(hào)varchar(11)否唯一4password用戶密碼varchar(32)否5sex性別varchar(2)否6birthday出生年月varchar(32)否7address地址varchar(32)否表4- 2好友信息表序列號(hào)字段描述類型空額外1id編號(hào)int(11)否主鍵(自增)2zhanghao用戶帳號(hào)varchar(11)否外鍵3friendid好友帳號(hào)varchar(255)4blackname黑名單varchar(255)表4- 3歷史記錄表序列號(hào)字段描述類型空額外1id編號(hào)int(11)否主鍵(自增)2zhanghao用戶帳號(hào)varchar(32)否3who屬于者varchar(11)否外鍵4sendtime發(fā)送時(shí)間varchar(32)否5font字體類型varchar(64)否6record發(fā)送類容varchar(255)否7pic表情varchar(255)5 系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)編碼階段是將軟件設(shè)計(jì)階段的各種描述轉(zhuǎn)變成程序代碼,在編碼階段應(yīng)該注意編程語(yǔ)言的選擇,在本次課題中,我們使用的是java語(yǔ)言。5.1 界面設(shè)計(jì)軟件界面的設(shè)計(jì)是非常重要的,對(duì)于各個(gè)模塊采用不同的組件進(jìn)行設(shè)計(jì)。下面簡(jiǎn)單的介紹下如何設(shè)計(jì)軟件的界面。5.1.1 登錄界面本即時(shí)聊天系統(tǒng)的登錄界面(圖:3-5),采用jfram容器,使用默認(rèn)布局,通過(guò)setbounds()方法自定義位置。上部是一個(gè)jpanel,內(nèi)置一個(gè)jlabel;中間是根據(jù)需要放置jlabel、jtextfield、jpasswordfield;最下方放置一個(gè)jbutton。具體代碼如下:sjp1_jbl=new jlabel(new imageicon(image/login.jpg);s jp1_jbl.setbounds(0,-5,428,159);sjbl1=new jlabel(zhanghao);sjbl1.setbounds(70, 165, 30, 30);sjtf=new jtextfield();sjtf.setbounds(110, 163, 130, 30);sjbl2=new jlabel(mima);sjbl2.setbounds(70, 200, 30, 30);sjbl3=new jlabel(zhuce);sjbl3.setbounds(255, 163, 52, 30);sjpf=new jpasswordfield();sjpf.setbounds(110, 200, 130, 30);sjbl4=new jlabel(xiugai);sjbl4.setbounds(255, 200, 52, 30);sjp3_jb1=new jbutton(new imageicon(image/denglu.png); sjp3_jb1.setbounds(85, 270, 195, 30);圖5- 1登錄界面5.1.2 注冊(cè)界面在注冊(cè)界面(3-6)中同樣采用默認(rèn)布局自定義位置。對(duì)于jlabel、jtextfield、jpasswordfield如何放置就不講太多了,在這里主要講下新引入的知識(shí)點(diǎn)hashmap集合和graphics繪畫技術(shù)。hashmap是集合類,我們可以通過(guò)put、get方法向其中添值、取值,其最重要的一點(diǎn)是它是鍵值對(duì)形式的,通過(guò)一個(gè)鍵就能取出相應(yīng)的值,對(duì)于本界面的全國(guó)省市聯(lián)動(dòng),正好可以用到地址的靈活變動(dòng)。通過(guò)for循環(huán)創(chuàng)建每個(gè)省份按鈕,并添加addactionlistener監(jiān)聽器,獲取其對(duì)應(yīng)省份代號(hào),再通過(guò)get方法向hashmap索要其對(duì)應(yīng)的id值。代碼如下:添加:hashmap hm=new hashmap();for(int i=0;iprovince.length;i+)hm.put(provincei, ari);獲?。篿f(hm.containskey(s)registeraddress address=(registeraddress) hm.get(s);system.arraycopy(address.getcity(), 0, city, 0, address.getcity().length);for(int i=0;iaddress.getcity().length;i+)addr_jb3.additem(cityi);graphics可以對(duì)其進(jìn)行重寫,調(diào)用其方法進(jìn)行繪畫,對(duì)于本界面中的驗(yàn)證碼,正是運(yùn)用到此類,可以根據(jù)自己想要的樣式進(jìn)行繪制。代碼如下:stringbuffer randomrecv = new stringbuffer();for (int i = 0; i recv; i+) /通過(guò)循環(huán)繪制驗(yàn)證碼string stm = string.valueof(codesequencerandom.nextint(codesequence.length);red = random.nextint(255);green = random.nextint(255);blue = random.nextint(255);g.drawstring(stm, (i + 1) * x, codey);code= randomrecv.tostring();圖5- 2注冊(cè)界面5.1.3 修改密碼界面密碼修改界面(圖3-7)是一個(gè)重要的組成部分,用戶在此能夠進(jìn)行密碼修改、重置密碼;在本界面中同樣的運(yùn)用到以上界面的基本布局界面的組件,同樣的引入了新的組件jtabbedpane。jtabbedpane提供add方法允許設(shè)計(jì)者向其中添加標(biāo)題,通過(guò)添加addchangelistener監(jiān)視器,當(dāng)觸發(fā)時(shí)候進(jìn)行頁(yè)面的跳轉(zhuǎn)。從密碼修改界面能夠開出它擁有兩個(gè)界面提供用戶使用。代碼如下:sjp0=new jpanel();sjp0.setlayout(null);sjp1=new jpanel();sjp1.setlayout(null);sjtp=new jtabbedpane();sjtp.add(修改密碼,sjp0);sjtp.add(忘記密碼,sjp1);圖5- 3密碼修改界面5.1.4 好友列表界面在好友列表界面(圖3-8)中,引入一個(gè)新的組件jtree。jtree是樹形組件,能夠添加刪除子節(jié)點(diǎn),子節(jié)點(diǎn)同樣能夠添加子節(jié)點(diǎn)。jtree是許多初學(xué)者在做類似系統(tǒng)軟件的首選,對(duì)于java默認(rèn)的tree節(jié)點(diǎn)、把柄的圖標(biāo)是不美觀的,我們需要對(duì)其進(jìn)行重寫。代碼如下:tree.setcellrenderer(new defaulttreecellrenderer() public getstreerenderercomponent(jtree stree,string val,boolean bool, int cow, boolean havefoc) if (leaf) this.seticon(title);this.setclosedicon(close)return this;);圖5- 4好友列表界面5.1.5 聊天窗口界面聊天窗口界面(3-9)是即時(shí)聊天系統(tǒng)里最重要的部位,在這我們能夠進(jìn)行交流,發(fā)送表情,發(fā)送文件,音樂(lè),視頻等,它是軟件中的靈魂。從圖片上看它只是個(gè)普通的界面,但是它擁有很多沒有展示的部分,例如表情窗口、聊天記錄界面、字體樣式選框等。在這個(gè)普通的界面中運(yùn)用到了jwindow、jtextpane、和jsplitpane組件。jtextpane是一個(gè)可以編輯和顯示圖片、文本html等的富文本組件。jwindow是一個(gè)窗口容器。但是它不像jfram那樣,它不具有標(biāo)題欄、窗口管理按鈕等,我自認(rèn)為它是做表情窗口最佳的選擇。jsplitpane分隔組件。兩個(gè)組件圖形化分隔以外觀實(shí)現(xiàn)為基礎(chǔ),并且這個(gè)組件可以由用戶自由調(diào)整大小。代碼如下:jlabel jl=new jlabel105;string file_names=;for(i=0;ijl.length;i+)file_names=img/+i+.gif;jli=new jlabel(new chaticon(qqchatfacewindow.class.getresource(file_names),i), swingconstants.center);jli.settooltiptext(i+);jli.addmouselistener(new mouseadapter() public void mouseclicked(mouseevent e)if(e.getbutton()=1) jlabel facelabel = (jlabel)(e.getsource();chatframe.insertface(facelabel.geticon(););jp.add(jli);圖5- 5聊天窗口界面5.1.6 服務(wù)器端界面服務(wù)端僅是用來(lái)開啟socket,界面并沒有什么太多的功能,只是兩個(gè)按鈕而已,在這里就不做過(guò)多的介紹了。5.2 功能實(shí)現(xiàn)在實(shí)現(xiàn)功能之前我們需要做一些必要的共同類。首先我們需要做一個(gè)用戶信息類(user),接著是信息類(message),其次是消息類型類(messagetype),它們不需要做過(guò)多的設(shè)計(jì),只需要定義一些需要的變量,然后對(duì)其進(jìn)行set和get即可。5.2.1 實(shí)現(xiàn)登錄實(shí)現(xiàn)登錄功能還是一個(gè)比較簡(jiǎn)單的功能,只需要我們獲取到用戶的登錄帳號(hào)和登錄密碼,通過(guò)對(duì)象流將對(duì)象(u)給傳遞給服務(wù)器,服務(wù)器通過(guò)get方法獲取帳號(hào)和密碼,然后從數(shù)據(jù)庫(kù)中查詢用戶的密碼字段信息進(jìn)行對(duì)比,將對(duì)比的后的信息再通過(guò)對(duì)象流的方式傳遞給客戶端,再進(jìn)行相應(yīng)的處理。代碼如下:user m=new user();m.setuserno(sjtf.gettext().trim();m.setpasswd(md5.getmd5code(new string(jpf.getpassword();m.settype(messagetype.message_login);qqclientuser qqclientuser=new qqclientuser();if(qqclientuser.checkuser(m)qqfriendlistframe peoplelist =new qqfriendlistframe(m. getuserno ();/將好友聊天窗口添加到集合中qqfriendlist.addfriendpeople(m.getuserno(), peoplelist);objectoutputstream oos = null;try oos=newobjectoutputstream(m.getuserno ().gets().getoutputstream(); catch (ioexception e1) e1.printstacktrace();msges s=new msges ();/做一個(gè)messages.setmestype(msges.message_get_allfriend);s.setsender(m.getuserno();/指明我要的是這個(gè)帳號(hào)的全部好友5.2.2 實(shí)現(xiàn)注冊(cè)注冊(cè)功能需要將用戶在注冊(cè)界面的填寫信息和相應(yīng)的選擇信息,通過(guò)對(duì)象流的形式將對(duì)象(u)傳遞給服務(wù)器,服務(wù)器調(diào)用數(shù)據(jù)庫(kù)插入代碼即可。代碼如下:messagearray r=new messagearray();string str=new string6;md5 getmd5 = new md5();str0=nick_jtf.gettext();str1=num_jtf.gettext();str2=getmd5.getmd5code(string.valueof(jpf1.getpassword();str3=sex;str4=bir_jb1.getselecteditem().tostring()+bir_jb2.getselecteditem().tostring()+bir_jb3.getselecteditem().tostring();str5=addr_jb1.getselecteditem().tostring()+ +addr_jb2.getselecteditem().tostring()+addr_jb3.getselecteditem().tostring();r.setstr(str);user m=new user();m.setstr(str);u.settype(messagetype.message_ret_register);clientuser qqclientuser=new clientuser();if(qqclientuser.register(m)dispose();new clientlogin();5.2.3 實(shí)現(xiàn)修改密碼密碼的修改相對(duì)的簡(jiǎn)單,用戶只需要根據(jù)相應(yīng)的選項(xiàng)卡填寫,就能夠進(jìn)行密碼的修改,至于實(shí)現(xiàn)的代碼如下:user m=new user();m.setuserid(m0);m.setnick(1);m.setpasswd(md5.getmd5code(m1);m.setnewpassword(md5.getmd5code(m2);m.settype(messagetype.message_rel_password);clientuser qqclientuser=new clientuser();if(qqclientuser.relpasswored(m)dispose();new clientlogin();5.2.4 添加、刪除好友添加好友相對(duì)于刪除好友,是一件比較麻煩的事情,具體的思路是:當(dāng)用戶在添加好友輸入框中輸入想要添加好友的帳號(hào),然后通過(guò)對(duì)象流將對(duì)象(m)傳送給服務(wù)器,服務(wù)器通過(guò)后臺(tái)hashmap集合獲取好友的線程,然后將對(duì)象傳遞給好友。對(duì)于如何獲取到好友的線程呢?在這里就粗略的講述一下:本系統(tǒng)在每個(gè)用戶登錄的時(shí)候,服務(wù)器都會(huì)為每個(gè)用戶新建一個(gè)線程,同時(shí)將每個(gè)用戶的線程和其帳號(hào)通過(guò)hashmap進(jìn)行鍵值對(duì)的綁定,到使用的時(shí)候服務(wù)器只需通過(guò)帳號(hào)就能獲取到相應(yīng)的帳號(hào)線程,這樣就能夠很簡(jiǎn)單的幫我們想要傳遞的信息轉(zhuǎn)發(fā)給相應(yīng)的好友。代碼如下:public hashmap thread=new hashmap();/向hm中添加一個(gè)客戶端通訊線程public static void setclients (string no, serverconnecclient sct)thread.put(no, sct);public static serverconnectclient getclient(string no)return thread.get(no);圖5- 6添加、刪除好友選項(xiàng)框圖5- 7添加好友提示框5.2.5 移動(dòng)黑名單黑名單功能是每個(gè)即時(shí)聊天軟件必不可少的功能,對(duì)于本系統(tǒng)的黑名單功能,那么我又是如何實(shí)現(xiàn)的呢?其實(shí)在方法是比較簡(jiǎn)單的,jtree提供一個(gè)自帶的方法,它允許子節(jié)點(diǎn)進(jìn)行移動(dòng),我們能夠在界面上看到相互之間的移動(dòng),那么剩下的問(wèn)題就是數(shù)據(jù)庫(kù)存儲(chǔ)的問(wèn)題了。對(duì)于通常系統(tǒng)的黑名單,你將對(duì)方添加至黑名單,但對(duì)方并未將你刪除或者也添加至黑名單;而且本系統(tǒng)的數(shù)據(jù)庫(kù)中的好友字段在添加好友的時(shí)候只是將要添加好友的帳號(hào)追加到自己的好友字段中,好友的字段不做任何的處理,所以在添加黑名單的時(shí)候,你不知道自己的好友字段中是否有此帳號(hào);本著簡(jiǎn)單的原則,我們只要將你想添加黑名單的帳號(hào)追加到你的黑名單字段,對(duì)于其在你好友字段中不做任何的處理。只需要在提取好友id信息的時(shí)候把存在黑名單中的好友id移出即可。代碼如下:public arraylist getfriend(string userid)string sql1=select friendid from friend where zhanghao=+userid+ limit 1;string sql2=select zhanghao from friend where friendid like %+userid+%;string sql3=select blackname from friend where zhanghao=+userid+ limit 1;sqlhelper sqlhelp=new sqlhelper();arraylist str=sqlhelp.execute_getfriends(sql1, sql2,sql3);arraylist al=new arraylist();objecttr1=(object)tr.get(0);objecttr2=(object)tr.get(1);for(int i=0;itr1.length;i+)/system.out.println(tr1i);al.add(tr1i);for(int j=0;jtr2.length;j+)/system.out.println(tr2i);if(tr1i.equals(tr2j)al.remove(tr1i);objecttr=al.toarray();al.clear();al.add(str);al.add(str2);return al;5.2.6 多對(duì)多聊天多對(duì)多的聊天是本系統(tǒng)的一個(gè)比較亮點(diǎn)的設(shè)計(jì),用戶能夠在同一時(shí)間跟多個(gè)用戶進(jìn)行聊天,對(duì)于聊天的內(nèi)容不會(huì)錯(cuò)亂。同綁定線程一樣,在用戶開啟好友聊天界面的時(shí)候,客戶端將你的帳號(hào)同聊天好友的帳號(hào)組合在一起,通過(guò)hashmap的鍵值對(duì)的形式將組合后的字符串和這個(gè)窗口進(jìn)行綁定,每開啟一個(gè)窗口都進(jìn)行綁定,等到客戶端接受到服務(wù)器發(fā)送來(lái)的信息,進(jìn)行相應(yīng)的處理,即可將信息追加到對(duì)應(yīng)的聊天窗口中。代碼如下:msges s=new msges ();if(s.get msges ().equals( 3)if(qqchat.getchat(m.getgetter()+ +m.getsender()=null)qqfriendchatframe friendchat=new qqfriendchatframe(m.getgetter(),m.getsender();qqchat.addqqchat(m.getgetter()+ +m.getsender(), qqchat);qqfriendchatframe friendchat=qqchat.getqqchat(m.getsender()+ m.getgetter();if(!qqchat.isvisible()qqchat.setvisible(true);friendchat.addmeg(m.getsender(), m.getcon(), m.getpic(), m.getfname(), m.getfsize(), m.getfstyle(), m.getfcolor();/顯示5.2.7 顯示表情在本聊天系統(tǒng)中,用戶能夠發(fā)送表情圖片,然而圖片跟文字是不一樣的,不能夠直接的顯示在聊天窗口上的,也不能直接的傳送給好友,也不能將其直接的存放在數(shù)據(jù)庫(kù)中;因此,我專門給顯示表情編寫了一些必要的函數(shù)。由于本系統(tǒng)是c/s架構(gòu)的,每一個(gè)客戶端都是一樣的,系統(tǒng)內(nèi)存放著這些表情圖片,而且每一個(gè)表情圖片都有自己相應(yīng)的id;因此,我們只需要提取到使用的表情圖片的id,以及獲得它在發(fā)送信息的位置即可,到時(shí)我們只需要將發(fā)送的文本和表情的id及其在發(fā)送信息的位置發(fā)送過(guò)去即可,客戶端內(nèi)置一些專門處理表情的函數(shù),代碼如下:重組發(fā)送表情:private string buildpicinfo()stringbuilder all = new stringbuilder();for(int i = 0; i this.jtp2.gettext().length(); i+) if(dmsg.getname().equals(icon) icon icon = styleconstants.geticon(jtp2.getstyleddocument().getattributes(); friendchaticon fch = (friendchaticon)icons; pictureinfo pictureinfo= new pictureinfo (i,string.valueof(fch.getid(); allpictureinfo.add(pictureinfo); all.append(i+#+ fch.getid()+); 重組收到的表情信息串:public void receivedpicinfo(string pic)string picinfo = pic.split(+);for(int i = 0 ; i picinfo.length ; i+)string pp = picinfo i.split(#);if(pp.length=2)picinfo spic = new picinfo(integer.parseint(pp 0), pp 1);addreceivdpicture.add(spic);/將表情添加到滾動(dòng)列表中圖5-8表情窗口5.2.8 文件的發(fā)送發(fā)送文件是很多聊天系統(tǒng)都擁有的功能,在本系統(tǒng)中我們能夠發(fā)送文本文件、音樂(lè)、視頻等,能夠給用戶提供更多的服務(wù)。對(duì)于如何發(fā)送文件,這是個(gè)值得探討的問(wèn)題。在java中,它提供了很多能夠發(fā)送文件的方法,例如字符流、字節(jié)流、對(duì)象流等,但是在服務(wù)器端、客戶端我們一直使用的是對(duì)象流進(jìn)行數(shù)據(jù)的接受、發(fā)送,從而使發(fā)送的信息不至于錯(cuò)亂??紤]到我們不可能專門為發(fā)送文件再寫一個(gè)服務(wù)器端,因此,對(duì)于文件的發(fā)送我們?cè)俅蔚氖褂脤?duì)象流的形式進(jìn)行發(fā)送,同樣文件的發(fā)送也可以多對(duì)多的發(fā)送,不會(huì)造成錯(cuò)亂。文件的發(fā)送方式已經(jīng)解決,那么對(duì)于文件的讀取方式我們需要再次進(jìn)行思考,由于發(fā)送的文件除了有文本文件,還有音樂(lè)、視頻等,我們不可能直接使用字符流的方式進(jìn)行讀取,因此,我們只能采用字節(jié)流的形式讀取文件。此時(shí),文件的讀取方式、發(fā)送方式已經(jīng)確定,剩下的就是寫入方式了,既然我們采用的是字節(jié)流的方式讀取的,就應(yīng)該用字節(jié)流的方式進(jìn)行寫入,如何采用字符流的方式寫入,會(huì)出現(xiàn)一些意想不到的問(wèn)題,例如:文本文件可能會(huì)有亂碼,一些圖片、exe文件等打不開的問(wèn)題。代碼如下:文件的讀取和發(fā)送:fileinputstream fis =new fileinputstream(filepath);byte bytes=new byte1024*4;while(fis.read(bytes)!=-1)sm.setbytes(bytes);objectoutputstream pos=new objectoutputstream(getoutputstream();pos.writeobject(sm);文件的寫入:fileoutputstream ps=new fileoutputstream(sm.getsavepath()+sm.getfilename(),true);ps.write(sm.bytes();5.2.9 歷史記錄歷史記錄是每一個(gè)即時(shí)聊天系統(tǒng)必備的功能,本系統(tǒng)的歷史記錄做的相對(duì)比較簡(jiǎn)單,除了能夠在每一頁(yè)顯示規(guī)定的記錄條數(shù)之外,還能夠顯示當(dāng)前頁(yè)數(shù)和總頁(yè)數(shù),用戶能夠通過(guò)點(diǎn)擊上一頁(yè)和下一頁(yè)進(jìn)行翻看歷史記錄。代碼如下:public void appendreceivechatrecord(arraylist list) /接受到的聊天歷史信息追加jtp3.settext();for(int i=0;i list.size();i+)string str=(string) al.get(i);system.out.println(str0+str1+str2+str3+str4);string msg=str0+ +str1;datefont.setmessage(msg);insertrecord(datefont);/插入標(biāo)題string s=str2;string fmsg=s.split(+);string ss=fmsg3.substring(17, fmsg3.length()-1).split(,);int r=integer.parseint(ss0);int g=integer.parseint(ss1.substring(2);int b=integer.parseint(ss2.substring(2);myfont=ge
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 多維數(shù)據(jù)隱私保護(hù)-洞察及研究
- 定向搜索在物聯(lián)網(wǎng)安全中的作用與挑戰(zhàn)-洞察闡釋
- 智能玩具市場(chǎng)增長(zhǎng)-洞察及研究
- 智能預(yù)測(cè)與風(fēng)險(xiǎn)評(píng)估-洞察及研究
- 湖南省建筑施工企業(yè)安全生產(chǎn)管理人員
- 江西省突發(fā)事件總體應(yīng)急預(yù)案
- 公司安全生產(chǎn)管理制度
- 邊緣計(jì)算安全協(xié)議設(shè)計(jì)-洞察闡釋
- 量子無(wú)損信道的容量極限研究-洞察闡釋
- 旅游企業(yè)安全生產(chǎn)管理制度
- 行車特種設(shè)備試題及答案
- 食品工廠5S管理
- 銀行崗前培訓(xùn)內(nèi)容
- 墨水制備研究
- “雙減”政策實(shí)施中的挑戰(zhàn)與機(jī)遇
- 酒店安全生產(chǎn)責(zé)任制清單
- 人工智能技術(shù)在供應(yīng)鏈管理中的應(yīng)用研究綜述
- EPC國(guó)際工程稅收爭(zhēng)議案例分析與風(fēng)險(xiǎn)防范策略
- 醫(yī)學(xué)ICU月膿毒血癥護(hù)理查房課件
- 3.5-跨學(xué)科實(shí)踐:探索廚房中的物態(tài)變化問(wèn)題(課件)八年級(jí)物理上冊(cè)(人教版2024)
- 2023-2024學(xué)年上海市普陀區(qū)三年級(jí)(上)期末數(shù)學(xué)試卷
評(píng)論
0/150
提交評(píng)論