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

正文內(nèi)容

基于cs結(jié)構(gòu)的即時(shí)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)(編輯修改稿)

2024-07-15 15:33 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 :JAVA聊天系統(tǒng)聊天模塊文件模塊登錄模塊注冊(cè)用戶管理模塊文件接收文件發(fā)送發(fā)送文字發(fā)送圖片修改用戶增加用戶刪除用戶在線用戶管理查找用戶踢用戶下線查看在線用戶圖43 系統(tǒng)模塊普通用戶的用例圖:注冊(cè)文字登錄用戶聊天 uses圖片 uses發(fā)送文件文件 uses接收文件 uses圖44 普通用戶用例圖后臺(tái)管理員的用例圖:管理員登錄增加用戶修改用戶查找用戶刪除用戶踢用戶下線查看在線用戶圖45 后臺(tái)用戶用例圖 活動(dòng)圖(1)用戶登陸活動(dòng)圖首先填寫(xiě)登錄信息,提交以后服務(wù)器會(huì)對(duì)用戶名和密碼進(jìn)行驗(yàn)證。如果不正確,返回一個(gè)提示信息。如果登陸成功,就更新在線狀態(tài)。通知所有好友自己已經(jīng)上線。服務(wù)器再檢查是否有他的離線消息,如果有這立即發(fā)送給用戶。客戶機(jī)服務(wù)器填寫(xiě)登錄信息登錄請(qǐng)求校驗(yàn)身份創(chuàng)建拒絕登錄消息登錄請(qǐng)求(失?。?身份不符更新在線狀態(tài)返回在線好友創(chuàng)建登錄成功消息登錄請(qǐng)求(成功)向在線好友發(fā)布上線信息創(chuàng)建離線消息好友離線消息消除離線消息記錄圖46用戶登錄活動(dòng)圖(2)發(fā)送消息活動(dòng)圖短消息發(fā)送以后,服務(wù)器端對(duì)應(yīng)的監(jiān)聽(tīng)線程會(huì)接收到一個(gè)數(shù)據(jù)包。此包中包含接收者的信息,如果接收者在線,數(shù)據(jù)包將會(huì)轉(zhuǎn)發(fā)到接收者[17]。如果不在線,存在服務(wù)器端,等它上線在發(fā)送。服務(wù)器客戶機(jī)客戶機(jī)填寫(xiě)短信內(nèi)容短信發(fā)送短信 監(jiān)聽(tīng)端口 對(duì)方已離線則發(fā)往服務(wù)器網(wǎng)絡(luò)故障 成功發(fā)送寫(xiě)入離線消息庫(kù)監(jiān)聽(tīng)端口短信(發(fā)送失?。┙邮斩绦艌D47發(fā)送消息活動(dòng)圖 系統(tǒng)類設(shè)計(jì):客戶端和服務(wù)器端通信時(shí),發(fā)送的都是Message類的對(duì)象,因此Message類的設(shè)計(jì)很重要。表42 Message屬性名作用private Integer msgType。信息類型private String content。 信息的文本內(nèi)容private Integer senderAccount。發(fā)送者accountprivate Integer receiverAccount。接收者accountprivate String time。發(fā)送時(shí)間private User myself。private ListUser friends。自己本身對(duì)象,用與好友列表頭好友列表 privatetransient Image img。圖片對(duì)象(不傳送)privatebyte[] imageByte。圖片的內(nèi)容private String fileName。文件名稱privatebyte[] fileByte。文件的長(zhǎng)度privateint length。//文件長(zhǎng)度,以KB為單位文件的內(nèi)容privateint state。文件傳輸?shù)臓顟B(tài):0是不接受文件,1是接受文件,2請(qǐng)求發(fā)送文件,3文件傳輸中,4文件傳送完成 private Integer msgType消息的類型有這么幾種:publicinterface MessageType { Integer message_succeed=1。//表明是登陸成功 Integer message_login_fail=2。//表明登錄失敗 Integer message_m_mes=3。//普通信息包 Integer message_get_onLineFriend=4。//要求在線好友的包 Integer message_ret_onLineFriend=5。//返回在線好友的包 Integer message_offline=6。//下線通知包 Integer message_img=7。//圖片包 Integer message_file=8。//文件包}:截圖類的實(shí)現(xiàn)類為:class Screenshot extends JFrame implements MouseListener,MouseMotionListener。JFrame+paint(in Graphics g)監(jiān)聽(tīng)各種鼠標(biāo)動(dòng)作 MouseListenerScreenshot+mouseDragged(in MouseEvente)+mouseClicked(in MouseEvente)+mousePressed(in MouseEvente)+mouseReleased(in MouseEvente)+paint(in Graphics g)MouseMotionListener圖48Screenshot類截圖類的核心是JDK中:Robot類中createScreenCapture(RectanglescreenRect) 創(chuàng)建包含從屏幕中讀取的像素的圖像。先用截取全部屏幕的圖片,然后顯示出來(lái),覆蓋住整個(gè)屏幕。然后監(jiān)聽(tīng)鼠標(biāo)事件,再用createScreenCapture(RectanglescreenRect)方法截圖。雙擊表示截圖成功,右鍵表示取消截圖。:記錄日志的功能被封裝在MessageRecord類中,在發(fā)送或接受到數(shù)據(jù)后,將其寫(xiě)入日志文件。Thread+runafterSend:記錄發(fā)出數(shù)據(jù)afterreceive:記錄接收到的數(shù)據(jù) ClientConnToServerThred+run()+send(in o:Object)+receive():ObjectMessageRecord+afterSend(in o:Object)+afterREceive(in o:Object0圖49MessageRecord類如果是圖片則顯示出,發(fā)送時(shí)間和圖片大小。如果是文件則顯示出請(qǐng)求發(fā)送時(shí)間,同意接收時(shí)間,接收完成時(shí)間,和文件大小。 :服務(wù)器端的核心是對(duì)應(yīng)客戶的線程,每個(gè)socket對(duì)應(yīng)一個(gè)線程,也就是每一個(gè)客戶端都在服務(wù)器端有一個(gè)相應(yīng)的線程。它負(fù)責(zé)轉(zhuǎn)發(fā)客戶端發(fā)來(lái)的消息。線程類為ClientThread:表43ClientThread類屬性名作用publicvoid notifyOnline()通知其他線程,自己上線了,讓客戶方更新頭像publicvoid run() 線程的主題,轉(zhuǎn)發(fā)消息publicvoid notifyOffline(){通知其他線程,自己下線了,讓客戶方更新頭像publicvoid send(Object o) 發(fā)送消息public Object receive() 接收消息5 即時(shí)通信系統(tǒng)實(shí)現(xiàn) 實(shí)現(xiàn)概況本系統(tǒng)可分為登錄、聊天、文件、用戶管理和注冊(cè)五個(gè)功能模塊。“登錄”模塊為用戶提供登錄界面,并在用戶登錄顯示好友列表;“聊天”模塊實(shí)現(xiàn)用戶的即時(shí)傳送信息,即多用戶即時(shí)聊天,可以發(fā)送文字或者截圖;“文件”模塊主要實(shí)現(xiàn)一用戶向另一用戶發(fā)送文件,對(duì)方可以選擇接受或者拒絕。聊天記錄會(huì)以文本文檔格式保存?!坝脩艄芾怼蹦K即管理員對(duì)用戶進(jìn)行增刪改查,和踢用戶下線的操作。下面詳細(xì)介紹各個(gè)模塊的具體實(shí)現(xiàn)。 注冊(cè)模塊 流程圖開(kāi)始填寫(xiě)用戶信息存入數(shù)據(jù)庫(kù)顯示帳號(hào)結(jié)束圖51 用戶注冊(cè)流程圖,后臺(tái)是UserAction類,UserAction類中有方法:public String saveOrUpdate(){ (user)。 returnrefresh。 }saveOrUpdate則是用到了Userservice里面的方法:publicvoid saveOrUpdate(User u){ (()=+())。 if(()==null) (u)。 else (u)。 }DAO類中的方法:publicvoid save(User u){ conn=getConnection()。 try { ps=(SAVE)。 (1, ())。 (2, ())。 (3, ())。 (4, 1)。 (5, ())。 (6, ())。 ()。 } catch (SQLException e) { // TODO Autogenerated catch block ()。 }finally{ close()。 } }網(wǎng)頁(yè)上顯示用戶的account圖52用戶注冊(cè)信息 流程圖開(kāi)始填寫(xiě)用戶信息驗(yàn)證用戶信息驗(yàn)證用戶信息 成功 失敗發(fā)送登錄失敗信息接收離線信息結(jié)束圖53登錄流程圖 關(guān)鍵代碼1)客戶端代碼 登錄事件是定義在class IMClientLogin extends JFrame這個(gè)類的監(jiān)聽(tīng)事件中。登錄成功后,立即向服務(wù)器請(qǐng)求自己的好友列表。 //登錄事件 (new ActionListener() { publicvoid actionPerformed(ActionEvent e) {// cus=new IMClientUserServer()。// (())。 User u=new User()。 ((().trim()))。 (new String(()))。// 登陸成功 if((u)){ //向服務(wù)器發(fā)送數(shù)據(jù)包,請(qǐng)求在線人得信息 ClientConnToServerThread t=。 Message m=new Message()。 ()。 (())。 try { (m)。 } catch (IOException e1) { ()。 } dispose()。 } else (null, 用戶名或密碼錯(cuò)誤, 錯(cuò)誤, )。 } }。登錄邏輯是在publicclass IMClientUserServer 里面,認(rèn)證成功者就會(huì)新建一個(gè)線程,專門(mén)負(fù)責(zé)接收服務(wù)器端發(fā)來(lái)的信息class ClientConnToServerThread extends Thread 。publicboolean checkLogin(Object o) { boolean success=false。 Message msg=(Message) (o)。// (())。// ()。 if(().intValue()==()){ success=true。 User u=(User) o。 //將好友列表放到管理器中,進(jìn)行上下線操作 IMFriendList fl=new IMFriendList((),())。 =fl。 //開(kāi)啟客戶線程 ,接收服務(wù)器端的信息 connThread =new ClientConnToServerThread(())。 (())。 ()。 (()+)。 =connThread。 } return success。 }客戶端通過(guò)publicclass IMClientServer 類與服務(wù)器通信public Object sendLoginInfo(Object o) { try { ObjectOutputStream oos = new ObjectOutputStream(())。 (o)。 ObjectInputStream ois = new ObjectInputStream(())。 Message ms = (Message) ()。 return ms。 } catch (IOException e) { ()。 } catch (ClassNotFoundException e) { ()。 } returnnull。 }這樣按照MVC的模式設(shè)計(jì),減小系統(tǒng)的耦合。2)服務(wù)端代碼服務(wù)器端接收用戶驗(yàn)證信息的代碼被寫(xiě)在了一個(gè)線程publicclassServerThread extends Thread中,這樣服務(wù)器就可以不停的監(jiān)聽(tīng)端口,接收來(lái)自不同客戶端的請(qǐng)求,建立socket連接,也不會(huì)堵塞在主線程當(dāng)中[20]。從數(shù)據(jù)庫(kù)中搜索用戶,看是否存在publicboolean checkLogin(User u){ User user=(())。 if(user!=null){ return ().equals(())。 } returnfalse。 }如果驗(yàn)證成功,查找是否有他的離線消息,有就發(fā)送給他。然后在服務(wù)
點(diǎn)擊復(fù)制文檔內(nèi)容
外語(yǔ)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1