




已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
2015屆本科畢業(yè)論文(設計)基于java技術(shù)的即時聊天系統(tǒng)實現(xiàn)姓 名:_ xxxx _系 別:計算機與信息技術(shù)學院專 業(yè): 網(wǎng)絡安全 _學 號:_xxxxxxxx_ _指導教師:_ xxxxx _2015年 5月8日目 錄1 緒論11.1 背景11.2 論文研究內(nèi)容與方法12 開發(fā)環(huán)境介紹12.1 java技術(shù)簡介12.2 開發(fā)工具簡介13 需求分析13.1 功能性需求分析23.2 非功能性需求分析24 總體設計24.1 功能模塊設計24.2 數(shù)據(jù)庫設計35 系統(tǒng)詳細設計與實現(xiàn)55.1 界面設計55.1.1 登錄界面55.1.2 注冊界面55.1.3 修改密碼界面65.1.4 好友列表界面75.1.5 聊天窗口界面85.1.6 服務器端界面95.2 功能實現(xiàn)95.2.1 實現(xiàn)登錄95.2.2 實現(xiàn)注冊95.2.3 實現(xiàn)修改密碼105.2.4 添加、刪除好友105.2.5 移動黑名單115.2.6 多對多聊天125.2.7 顯示表情125.2.8 文件的發(fā)送135.2.9 歷史記錄136 測試階段14總 結(jié)14參考文獻15致 謝15基于java技術(shù)的即時聊天系統(tǒng)實現(xiàn)摘要基于java技術(shù)的即時聊天系統(tǒng)采用c/s架構(gòu),myeclipse集成開發(fā)環(huán)境和mysql數(shù)據(jù)庫為開發(fā)環(huán)境,在window7系統(tǒng)下使用java程序設計語言開發(fā)的一款聊天系統(tǒng)。系統(tǒng)主要分為:用戶注冊、用戶登錄、修改密碼、好友列表、聊天等五大模塊;在功能上用戶能夠進行添加刪除好友,移動黑名單,一對一、多對多的聊天,發(fā)送表情,傳送文件等操作。關鍵詞java;即時聊天系統(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商丘師范學院2015屆本科畢業(yè)論文(設計)1 緒論1.1 背景隨著互聯(lián)網(wǎng)的蓬勃發(fā)展,即時聊天已經(jīng)成為如今最流行的通訊方式,尤其在移動互聯(lián)網(wǎng)方面,即時聊天已經(jīng)與我們的生活息息相關。同時,java是一種非常流行的程序設計語言,可以用來開發(fā)面向?qū)ο?、跨平臺的應用程序。 即時聊天已經(jīng)與我們的生活不可分割,利用自己學習到的java語言開發(fā)一款自己的聊天軟件是一個非常不錯的選擇,既能夠檢驗自己對java技術(shù)的掌握,同時又能夠開發(fā)一款自己的聊天軟件。1.2 論文研究內(nèi)容與方法基于java技術(shù)的聊天系統(tǒng)主要是探索如何在java技術(shù)下能夠?qū)崿F(xiàn)即時聊天的一些基本功能:用戶注冊,用戶登錄,添加刪除好友,移動黑名單,實現(xiàn)一對一、多對多的聊天,能夠發(fā)送表情,傳送圖片、視頻等1。論文的設計主要采用了兩種研究方法:一是文獻資料研究的方法。在研究聊天系統(tǒng)現(xiàn)實中,本人通過圖書館、電子圖書館學習了java語言中的一些編程技術(shù);二是理論與實際相結(jié)合,既然掌握了技術(shù)與方法,那么就應該快速的進行實踐,在軟件的設計過程中,才能夠理解到理論與現(xiàn)實的差距,遇到棘手問題,應該快速查閱資料快速攻破。2 開發(fā)環(huán)境介紹本聊天系統(tǒng)是基于java技術(shù)的,采用c/s結(jié)構(gòu),采用mvc的開發(fā)框架,利用myeclipse、mysql數(shù)據(jù)庫作為開發(fā)工具。2.1 java技術(shù)簡介java是一種程序設計語言, 主要應用于android 應用、jsp網(wǎng)站、pc和游戲控制臺等領域。java語言能夠使開發(fā)者在設計程序的時候能夠根據(jù)自己的情況自定義數(shù)據(jù)類型和關聯(lián)操作,對于程序中的數(shù)據(jù)結(jié)構(gòu)的改變或者代碼的改變進行相應的操作;java語言編寫的程序編譯后無需再次編譯,可以在任何硬件設備下運行1。本次課題中主要用到swing工具包中jframe類,采用java和windows混合界面風格,作為開發(fā)程序的外觀風格來設計聊天系統(tǒng)界面;其次,使用java socket編程技術(shù)實現(xiàn)系統(tǒng)之間的網(wǎng)絡通信2。2.2 開發(fā)工具簡介myeclipse是一種集成開發(fā)軟件。myeclipse的功能強大,可以集成多種語言開發(fā)插件,進行相應開發(fā)語言的開發(fā)工作。mysql是一個關系數(shù)據(jù)庫,底層代碼是c、c+編寫的,通過編譯測試達到代碼的可移植;而且,它支持支持linux、windows、msc os等多種操作系統(tǒng),支持多線程。它的代碼是開源的,用戶可以在其基礎上根據(jù)自己的需要進行二次開發(fā);mysql的體積小、速度快、成本低,因此一些小型網(wǎng)站的開發(fā)都選擇 mysql 作為其網(wǎng)站的數(shù)據(jù)庫。3 需求分析軟件系統(tǒng)的開發(fā)是根據(jù)用戶的需求來設計開發(fā)出用戶需要的軟件系統(tǒng)或者系統(tǒng)中的軟件部分的過程。項目流程化能夠促進項目的監(jiān)管、人員的合理分配。需求分析是指對即時聊天系統(tǒng)的功能、非功能進行全面分析的過程,對以后開發(fā)出來的軟件應該實現(xiàn)什么樣的功能,具有什么樣的界面以及軟件能夠達到什么樣的性能等。3.1 功能性需求分析即時聊天系統(tǒng)在功能上主要能夠?qū)崿F(xiàn)如今人們經(jīng)常用到的各種即時通訊軟件的一些基本交流聊天的功能,主要的功能性需求如下:1. 登錄界面:注冊用戶能夠進行登錄,通過連接數(shù)據(jù)庫進行判斷用戶是否能夠進入好友列表界面。2. 注冊界面:用戶可以注冊,注冊信息可以被添加到數(shù)據(jù)庫,然后用于確定用戶的登錄。3. 好友列表界面:用戶能夠自由添加、刪除好友,移動黑名單等;同時能夠?qū)崿F(xiàn)雙擊好友,能夠進入對應好友聊天窗口等4. 聊天界面:能夠?qū)⒘奶斓男畔?、表情等顯示到對應的聊天界面上;能夠發(fā)送文件、音樂、視頻等;能夠?qū)α奶斓臍v史記錄進行簡單的查看、翻頁等。5. 修改密碼界面:讓用戶在忘記密碼或者想修改密碼時候,能夠進行修改密碼操作。3.2 非功能性需求分析1. 操作系統(tǒng):windows7旗艦版;2. 硬盤:500g;3. 開發(fā)平臺:myeclipse2014;4. 數(shù)據(jù)庫:mysql。4 總體設計軟件設計是從軟件的用戶的需求出發(fā),根據(jù)需求分析來確定軟件系統(tǒng)功能設計的整體結(jié)構(gòu),然后劃分各個功能模塊,最后確定每個模塊的實現(xiàn)算法以及編寫具體的代碼,最終形成了軟件的具體設計方案3。4.1 功能模塊設計根據(jù)系統(tǒng)分析的結(jié)果畫出系統(tǒng)功能模塊圖,對各個模塊進行細分,確定模塊相互結(jié)構(gòu)關系。 圖4- 1系統(tǒng)功能模塊圖4.2 數(shù)據(jù)庫設計通過用戶的注冊,聊天等形成初步的數(shù)據(jù)需求;對數(shù)據(jù)需求進行概念上的設計,得到對應的e-r圖;其次選擇合適的方法,將e-r圖轉(zhuǎn)化為關系模型;然后對關系模型進行物理設計4。1. e-r圖設計:分析確定各個數(shù)據(jù)表的字段、數(shù)據(jù)類型、關系等,畫出e-r圖。 圖4- 2用戶屬性圖4- 3好友屬性圖4- 4歷史記錄屬性2. 物理設計:根據(jù)系統(tǒng)的數(shù)據(jù)類型,我們可以選擇為數(shù)據(jù)庫表中字段最合適的數(shù)據(jù)類型,字段大小,索引結(jié)構(gòu)等5。表4- 1用戶信息表序列號字段描述類型空額外1id用戶編號int(11)否主鍵(自增)2name用戶名varchar(16)否3zhanghao用戶帳號varchar(11)否唯一4password用戶密碼varchar(32)否5sex性別varchar(2)否6birthday出生年月varchar(32)否7address地址varchar(32)否表4- 2好友信息表序列號字段描述類型空額外1id編號int(11)否主鍵(自增)2zhanghao用戶帳號varchar(11)否外鍵3friendid好友帳號varchar(255)4blackname黑名單varchar(255)表4- 3歷史記錄表序列號字段描述類型空額外1id編號int(11)否主鍵(自增)2zhanghao用戶帳號varchar(32)否3who屬于者varchar(11)否外鍵4sendtime發(fā)送時間varchar(32)否5font字體類型varchar(64)否6record發(fā)送類容varchar(255)否7pic表情varchar(255)5 系統(tǒng)詳細設計與實現(xiàn)編碼階段是將軟件設計階段的各種描述轉(zhuǎn)變成程序代碼,在編碼階段應該注意編程語言的選擇,在本次課題中,我們使用的是java語言。5.1 界面設計軟件界面的設計是非常重要的,對于各個模塊采用不同的組件進行設計。下面簡單的介紹下如何設計軟件的界面。5.1.1 登錄界面本即時聊天系統(tǒng)的登錄界面(圖:3-5),采用jfram容器,使用默認布局,通過setbounds()方法自定義位置。上部是一個jpanel,內(nèi)置一個jlabel;中間是根據(jù)需要放置jlabel、jtextfield、jpasswordfield;最下方放置一個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 注冊界面在注冊界面(3-6)中同樣采用默認布局自定義位置。對于jlabel、jtextfield、jpasswordfield如何放置就不講太多了,在這里主要講下新引入的知識點hashmap集合和graphics繪畫技術(shù)。hashmap是集合類,我們可以通過put、get方法向其中添值、取值,其最重要的一點是它是鍵值對形式的,通過一個鍵就能取出相應的值,對于本界面的全國省市聯(lián)動,正好可以用到地址的靈活變動。通過for循環(huán)創(chuàng)建每個省份按鈕,并添加addactionlistener監(jiān)聽器,獲取其對應省份代號,再通過get方法向hashmap索要其對應的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可以對其進行重寫,調(diào)用其方法進行繪畫,對于本界面中的驗證碼,正是運用到此類,可以根據(jù)自己想要的樣式進行繪制。代碼如下:stringbuffer randomrecv = new stringbuffer();for (int i = 0; i recv; i+) /通過循環(huá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注冊界面5.1.3 修改密碼界面密碼修改界面(圖3-7)是一個重要的組成部分,用戶在此能夠進行密碼修改、重置密碼;在本界面中同樣的運用到以上界面的基本布局界面的組件,同樣的引入了新的組件jtabbedpane。jtabbedpane提供add方法允許設計者向其中添加標題,通過添加addchangelistener監(jiān)視器,當觸發(fā)時候進行頁面的跳轉(zhuǎn)。從密碼修改界面能夠開出它擁有兩個界面提供用戶使用。代碼如下: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)中,引入一個新的組件jtree。jtree是樹形組件,能夠添加刪除子節(jié)點,子節(jié)點同樣能夠添加子節(jié)點。jtree是許多初學者在做類似系統(tǒng)軟件的首選,對于java默認的tree節(jié)點、把柄的圖標是不美觀的,我們需要對其進行重寫。代碼如下: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)是即時聊天系統(tǒng)里最重要的部位,在這我們能夠進行交流,發(fā)送表情,發(fā)送文件,音樂,視頻等,它是軟件中的靈魂。從圖片上看它只是個普通的界面,但是它擁有很多沒有展示的部分,例如表情窗口、聊天記錄界面、字體樣式選框等。在這個普通的界面中運用到了jwindow、jtextpane、和jsplitpane組件。jtextpane是一個可以編輯和顯示圖片、文本html等的富文本組件。jwindow是一個窗口容器。但是它不像jfram那樣,它不具有標題欄、窗口管理按鈕等,我自認為它是做表情窗口最佳的選擇。jsplitpane分隔組件。兩個組件圖形化分隔以外觀實現(xiàn)為基礎,并且這個組件可以由用戶自由調(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 服務器端界面服務端僅是用來開啟socket,界面并沒有什么太多的功能,只是兩個按鈕而已,在這里就不做過多的介紹了。5.2 功能實現(xiàn)在實現(xiàn)功能之前我們需要做一些必要的共同類。首先我們需要做一個用戶信息類(user),接著是信息類(message),其次是消息類型類(messagetype),它們不需要做過多的設計,只需要定義一些需要的變量,然后對其進行set和get即可。5.2.1 實現(xiàn)登錄實現(xiàn)登錄功能還是一個比較簡單的功能,只需要我們獲取到用戶的登錄帳號和登錄密碼,通過對象流將對象(u)給傳遞給服務器,服務器通過get方法獲取帳號和密碼,然后從數(shù)據(jù)庫中查詢用戶的密碼字段信息進行對比,將對比的后的信息再通過對象流的方式傳遞給客戶端,再進行相應的處理。代碼如下: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 ();/做一個messages.setmestype(msges.message_get_allfriend);s.setsender(m.getuserno();/指明我要的是這個帳號的全部好友5.2.2 實現(xiàn)注冊注冊功能需要將用戶在注冊界面的填寫信息和相應的選擇信息,通過對象流的形式將對象(u)傳遞給服務器,服務器調(diào)用數(shù)據(jù)庫插入代碼即可。代碼如下: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 實現(xiàn)修改密碼密碼的修改相對的簡單,用戶只需要根據(jù)相應的選項卡填寫,就能夠進行密碼的修改,至于實現(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 添加、刪除好友添加好友相對于刪除好友,是一件比較麻煩的事情,具體的思路是:當用戶在添加好友輸入框中輸入想要添加好友的帳號,然后通過對象流將對象(m)傳送給服務器,服務器通過后臺hashmap集合獲取好友的線程,然后將對象傳遞給好友。對于如何獲取到好友的線程呢?在這里就粗略的講述一下:本系統(tǒng)在每個用戶登錄的時候,服務器都會為每個用戶新建一個線程,同時將每個用戶的線程和其帳號通過hashmap進行鍵值對的綁定,到使用的時候服務器只需通過帳號就能獲取到相應的帳號線程,這樣就能夠很簡單的幫我們想要傳遞的信息轉(zhuǎn)發(fā)給相應的好友。代碼如下:public hashmap thread=new hashmap();/向hm中添加一個客戶端通訊線程public static void setclients (string no, serverconnecclient sct)thread.put(no, sct);public static serverconnectclient getclient(string no)return thread.get(no);圖5- 6添加、刪除好友選項框圖5- 7添加好友提示框5.2.5 移動黑名單黑名單功能是每個即時聊天軟件必不可少的功能,對于本系統(tǒng)的黑名單功能,那么我又是如何實現(xiàn)的呢?其實在方法是比較簡單的,jtree提供一個自帶的方法,它允許子節(jié)點進行移動,我們能夠在界面上看到相互之間的移動,那么剩下的問題就是數(shù)據(jù)庫存儲的問題了。對于通常系統(tǒng)的黑名單,你將對方添加至黑名單,但對方并未將你刪除或者也添加至黑名單;而且本系統(tǒng)的數(shù)據(jù)庫中的好友字段在添加好友的時候只是將要添加好友的帳號追加到自己的好友字段中,好友的字段不做任何的處理,所以在添加黑名單的時候,你不知道自己的好友字段中是否有此帳號;本著簡單的原則,我們只要將你想添加黑名單的帳號追加到你的黑名單字段,對于其在你好友字段中不做任何的處理。只需要在提取好友id信息的時候把存在黑名單中的好友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 多對多聊天多對多的聊天是本系統(tǒng)的一個比較亮點的設計,用戶能夠在同一時間跟多個用戶進行聊天,對于聊天的內(nèi)容不會錯亂。同綁定線程一樣,在用戶開啟好友聊天界面的時候,客戶端將你的帳號同聊天好友的帳號組合在一起,通過hashmap的鍵值對的形式將組合后的字符串和這個窗口進行綁定,每開啟一個窗口都進行綁定,等到客戶端接受到服務器發(fā)送來的信息,進行相應的處理,即可將信息追加到對應的聊天窗口中。代碼如下: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ù)庫中;因此,我專門給顯示表情編寫了一些必要的函數(shù)。由于本系統(tǒng)是c/s架構(gòu)的,每一個客戶端都是一樣的,系統(tǒng)內(nèi)存放著這些表情圖片,而且每一個表情圖片都有自己相應的id;因此,我們只需要提取到使用的表情圖片的id,以及獲得它在發(fā)送信息的位置即可,到時我們只需要將發(fā)送的文本和表情的id及其在發(fā)送信息的位置發(fā)送過去即可,客戶端內(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);/將表情添加到滾動列表中圖5-8表情窗口5.2.8 文件的發(fā)送發(fā)送文件是很多聊天系統(tǒng)都擁有的功能,在本系統(tǒng)中我們能夠發(fā)送文本文件、音樂、視頻等,能夠給用戶提供更多的服務。對于如何發(fā)送文件,這是個值得探討的問題。在java中,它提供了很多能夠發(fā)送文件的方法,例如字符流、字節(jié)流、對象流等,但是在服務器端、客戶端我們一直使用的是對象流進行數(shù)據(jù)的接受、發(fā)送,從而使發(fā)送的信息不至于錯亂??紤]到我們不可能專門為發(fā)送文件再寫一個服務器端,因此,對于文件的發(fā)送我們再次的使用對象流的形式進行發(fā)送,同樣文件的發(fā)送也可以多對多的發(fā)送,不會造成錯亂。文件的發(fā)送方式已經(jīng)解決,那么對于文件的讀取方式我們需要再次進行思考,由于發(fā)送的文件除了有文本文件,還有音樂、視頻等,我們不可能直接使用字符流的方式進行讀取,因此,我們只能采用字節(jié)流的形式讀取文件。此時,文件的讀取方式、發(fā)送方式已經(jīng)確定,剩下的就是寫入方式了,既然我們采用的是字節(jié)流的方式讀取的,就應該用字節(jié)流的方式進行寫入,如何采用字符流的方式寫入,會出現(xiàn)一些意想不到的問題,例如:文本文件可能會有亂碼,一些圖片、exe文件等打不開的問題。代碼如下:文件的讀取和發(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 歷史記錄歷史記錄是每一個即時聊天系統(tǒng)必備的功能,本系統(tǒng)的歷史記錄做的相對比較簡單,除了能夠在每一頁顯示規(guī)定的記錄條數(shù)之外,還能夠顯示當前頁數(shù)和總頁數(shù),用戶能夠通過點擊上一頁和下一頁進行翻看歷史記錄。代碼如下: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);/插入標題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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年刑法與刑事訴訟法考試試卷及答案
- 2025年數(shù)學分析與高等代數(shù)考試試卷及答案
- 2025年商業(yè)經(jīng)濟學與管理專業(yè)知識測試試卷及答案
- 2025年計算機網(wǎng)絡與安全考試試卷及答案解析
- 2025年個人理財與投資基礎知識考試題及答案
- 以堅強為話題的演講稿12篇
- 配電箱采購合同協(xié)議書詳細
- 詞語辨析與運用:七年級英語詞匯教學方法研究
- 《數(shù)字孿生技術(shù)及應用》課件 第五章 機器人應用
- 護理專業(yè)急救護理技能測試卷
- 江蘇省南京2022年中考歷史試卷(解析版)
- 《老年人認知記憶訓練》課件
- 一年級家長會課件2024-2025學年
- 滬教版八年級化學(下冊)期末試卷及答案
- 2024年廣東省中考生物+地理試卷(含答案)
- DL-T5796-2019水電工程邊坡安全監(jiān)測技術(shù)規(guī)范
- 一年級下-科學-非紙筆測試
- 上海地理會考復習
- 設施設備檢查記錄表
- 油漆安全技術(shù)說明書msds
- 小學數(shù)學一年級《求一個數(shù)比另一個數(shù)多幾、少幾》說課稿
評論
0/150
提交評論