freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于java技術(shù)的即時聊天系統(tǒng)實現(xiàn)(編輯修改稿)

2024-12-13 22:01 本頁面
 

【文章內(nèi)容簡介】 seAdapter() { public void mouseClicked(MouseEvent e){ if(()==1){ JLabel facelabel = (JLabel)(())。 (())。 } 9 } })。 (jl[i])。 } 圖 5 5 聊天窗口界面 服務(wù)器端界面 服務(wù)端僅是用來開啟 Socket,界面并沒有什么太多的功能,只是兩個按鈕而已,在這里就不做過多的介紹了。 功能實現(xiàn) 在實現(xiàn)功能之前我們需要做一些必要的 共同 類 。 首先我們需要做一個 用戶信息類( User),接著是信息類( Message),其次是消息類型類( MessageType),它們不需要做過多的設(shè)計,只需要定義一些需要的變量,然后對其進行 Set 和 Get 即可。 實現(xiàn)登錄 實現(xiàn)登錄功能還是一個比較簡 單的功能,只需要我們獲取到用戶的登錄帳號和登錄密碼,通過對象流 將對象 ( u) 給 傳遞給 服務(wù)器,服務(wù)器 通過 Get 方法獲取帳號和密碼,然后從數(shù)據(jù)庫中查詢 用戶的密碼 字段 信息 進行對比,將對比的后的信息再通過對象流的方式傳遞給客戶端,再進行相應(yīng)的處理。 代碼如下: User M=new User()。 (().Trim())。 ((new String(())))。 ()。 QqClientUser qqClientUser=new QqClientUser()。 if((M)){ QqFriendListFrame PeopleList =new QqFriendListFrame(M. getUserNo ())。 //將 好友 聊天窗口添加到 集合中 ((), PeopleList)。 ObjectOutputStream oos = null。 try { 10 oos=newObjectOutputStream( ().getS().getOutputStream())。 } catch (IOException e1) { ()。 } Msges S=new Msges ()。//做一個 Message ()。 (())。//指明我要的是這個 帳號 的 全部 好友 } 實現(xiàn)注冊 注冊功能需要將用戶在注冊界面的填寫信息和相應(yīng)的選擇信息,通過對象流的形式將對象( u)傳遞給服務(wù)器,服務(wù)器調(diào)用數(shù)據(jù)庫插入代碼即可。代碼如下: MessageArray R=new MessageArray()。 String []Str=new String[6]。 MD5 getMD5 = new MD5()。 Str[0]=()。 Str[1]=()。 Str[2]=((()))。 Str[3]=SEX。 Str[4]=().toString()+().toString()+edItem().toString()。 Str[5]=().toString()+ +().toString()+().toString()。 (Str)。 User M=new User()。 (Str)。()。 ClientUser qqClientUser=new ClientUser()。 if((M)){ dispose()。 new ClientLogin()。 } 實現(xiàn)修改密碼 密碼的修改相對的簡單,用戶只需要根據(jù)相應(yīng)的 選項卡 填寫,就能夠進行密碼的修改,至于實現(xiàn)的代碼如下: User M=new User()。 (m[0])。 (1)。 ((m[1]))。 ((m[2]))。 ()。 ClientUser qqClientUser=new ClientUser()。 if((M)){ dispose()。 new ClientLogin()。 } 11 添加、刪除好友 添加好友相對于刪除好友,是一件比較麻煩的事情,具體的思路是:當(dāng)用戶在添加好友輸入框中輸入想要添加好友的帳號,然后通過對象流將對象( m)傳送給服務(wù)器,服務(wù)器通過后臺 HashMap 集合 獲取好友的線程,然后將對象傳遞給好友。 對于如何獲取到好友的線程呢?在這里就粗略的講述一下:本系統(tǒng)在每個 用戶登錄的時候,服務(wù)器都會為每個用戶新建一個線程,同時將每個用戶的線程和其帳號通過 HashMap 進行鍵值對的綁定, 到使用的時候服務(wù)器只需通過帳號就能獲取到相應(yīng)的帳號線程 ,這樣就能夠很簡單的幫我們想要傳遞的信息轉(zhuǎn)發(fā)給相應(yīng)的好友 。 代碼如下: public HashMap Thread=new HashMapString, ServerConnecClient()。 //向 hm 中添加一個客戶端通訊線程 public static void SetClients (String No, ServerConnecClient Sct){ (No, Sct)。 } public static ServerConnectClient getClient(String No){ return (No)。 } 圖 5 6 添加、刪除好友選項框 圖 5 7 添加好友提示框 移動黑名單 黑名單功能是每個即時聊天軟件必不可少的功能,對于本系統(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 39。%+userId++%39。 String sql3=select blackname from friend where zhanghao=+userId+ limit 1。 SqlHelper sqlhelp=new SqlHelper()。 ArrayList str=(sql1, sql2,sql3)。 ArrayList al=new ArrayList()。 Object[]tr1=(Object[])(0)。 Object[]tr2=(Object[])(1)。 12 for(int i=0。i。i++){ //(tr1[i])。 (tr1[i])。 FOR(Int j=0。j。j++){ //(tr2[i])。 if(tr1[i].equals(tr2[j])){ (tr1[i])。 } } } Object[]tr=()。 ()。 (Str)。 (str2)。 return al。 } 多對多聊天 多對多的聊天是本系統(tǒng)的一個比較亮點的設(shè)計,用戶能夠在同一時間跟多個用戶進行聊天,對于聊天的內(nèi)容不會錯亂。 同綁定線程一樣,在用戶開啟好友聊天界面的時候,客戶端將你的帳號同聊天好友的帳號組合在一起,通過 HashMap 的鍵值對的形式將組合后的字符串和這個窗口進行綁定,每開啟一個窗口都進行綁定,等到客戶端接受到服務(wù)器發(fā)送來的信息,進行相應(yīng)的處理,即可將信息追加到對應(yīng)的聊天窗口中。 代碼如下: Msges S=new Msges ()。 if( Msges ().equals( 3)){ if((()+ +())==null){ QqFriendChatFrame FriendChat=new QqFriendChatFrame((),())。 (()+ +(), qqChat)。 } QqFriendChatFrame FriendChat=(()++ ())。 if(!()){ (true)。 } ((), (), (), (), (), (), ())。//顯示 } 顯示表情 在本聊天系統(tǒng)中,用戶能夠發(fā)送表情圖片,然而圖片跟文字是不一樣的,不能夠直接的顯示在聊天窗口上的, 也不能直接的傳送給好友, 也不能將其直接的存放在數(shù)據(jù)庫中;因此,我專門給顯示表情編寫了一些必要的函數(shù)。 由于本系統(tǒng)是 C/S 架構(gòu)的,每一個客戶端都是一樣的,系統(tǒng)內(nèi)存放著這些表情圖片,而且每一個表情圖片都有自己相應(yīng)的 Id;因此,我們只需要提取到使用的表情圖片的 Id,以及獲得它在發(fā)送信息的位置即可,到時我們只需要將發(fā)送的文本和表情的 Id 及其在發(fā)送信息的位置發(fā)送過去即可,客戶端內(nèi)置一些專 門處理表情的函數(shù),代碼如下: 13 重組發(fā)送表情 : private String buildPicInfo(){ StringBuilder all = new StringBuilder()。 for(int i = 0。 i ().length()。 i++){ if(().equals(icon)){ Icon icon = (().getAttributes())。 FriendChatIcon Fch = (FriendChatIcon)icons。 PictureInfo pictureInfo= new PictureInfo (i,(()))。 (pictureInfo)。 (i++ ()++)。 } } } 重組收到的表情信息串 : public void receivedPicInfo(String pic){ String[] PicInfo = ([+])。 FOR(Int i = 0 。 i 。 i++){ String[] pp = PicInfo [i].split([])。 if(==2){ PicInfo Spic = new PicInfo((pp [0]), pp [1])。 (Spic)。//將表情添加到滾動列表中 } } } 圖 58 表情窗口 文件的發(fā)送 發(fā)送文件是很多聊天系統(tǒng)都擁有的功能,在本系統(tǒng)中我們能夠發(fā)送文本文件、音樂、視頻等 ,能夠給用戶提供更多的服務(wù) 。 對于如何發(fā)送文件,這是個值得探討的問題。 在 Java中,它提供了很多能夠發(fā)送文件的方法,例如字符流、字節(jié)流、對象流等,但是在服務(wù)器端、客戶端我們一直使用的是對象流進行數(shù)據(jù)的接受、發(fā)送,從而使發(fā)送的信息不至于錯亂。考慮到我們不可能專門為發(fā)送文 件再寫一個服務(wù)器端,因此,對于文件的發(fā)送我們再次的使用對象流的形式進行發(fā)送,同樣文件的發(fā)送也可以多對多的發(fā)送,不會造成錯亂。 文件 的發(fā)送方式 已經(jīng)解決,那么對于文件的讀取方式我們需要再次進行思考, 由于發(fā)送的文件除了有文本文件,還有音樂、視頻等,我們不可能直接使 用字符流的方式進行讀取,因此,我們只能 14 采用字節(jié)流的形式讀取文件。此時,文件的讀取方式、發(fā)送方式已經(jīng)確定,剩下的 就是寫入方式了,既然我們采用的是字節(jié)流的方式讀取的,就應(yīng)該用字節(jié)流的方式進行寫入,如何采用字符流的方式寫入,會出現(xiàn)一些意想不到的問題,例如:文本文 件可能會有亂碼,一些圖片、 exe 文件等打不開的問題 。代碼如下: 文件的讀取和發(fā)送: FileInputStream fis =new FileInputStream(filePath)。 byte []bytes=new byte[1024*4]。 while(((bytes))!=1){ (bytes)。 ObjectOutputStream pos=new ObjectOutputStream(getOutputStream())。 (sm)。 } 文件的寫入: FileOutputStream ps=new FileOutputStream(()+\\+(),true)。 (())。 歷史記錄 歷史記錄是每一個即時聊天系統(tǒng)必備的功能,本系統(tǒng)的歷史記錄做的相對比較簡單,除了能夠 在每一頁 顯示 規(guī)定的 記錄 條數(shù)之外 ,還能夠顯示當(dāng)前頁數(shù)和總頁數(shù),用戶能夠通過點擊上一頁和下一頁進行翻看歷史記錄。 代碼如下: public void AppendReceiveChatRecord(ArrayList List){ //接受到的聊天歷史信息追加 ()。 For(Int i=0。i ()。
點擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1