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

正文內(nèi)容

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

2025-06-21 15:33本頁面
  

【正文】 最后再次對關(guān)心、幫助、支持和鼓勵我的所有領(lǐng)導(dǎo)、老師和同學(xué)表示誠摯的謝意! 參考文獻(xiàn)[1]ICQ Inc. what is ICQ? About the Web39。在此給他們獻(xiàn)上最誠摯的謝意和最深的祝福。在我漫長的求學(xué)生涯中,傾注了父母一生的心血,是他們多年來的辛勤付出,使我能順利完成學(xué)業(yè)。在論文撰寫過程中,趙老師認(rèn)真的分析每個同學(xué)的論文,并且找出相應(yīng)的錯誤,督促我們改正。趙老師在畢業(yè)設(shè)計(jì)過程中給予了我諄諄教誨和無私幫助。借此機(jī)會要對母校,親人,老師和同學(xué)們表示感謝!再回首,母校的一草一木是那樣熟悉;再回首,母校的一磚一瓦是那樣親切,在此對母校表示深深的感謝與懷念,感謝沈陽理工大學(xué)給我的學(xué)習(xí)機(jī)會!首先,我誠摯地感謝我的導(dǎo)師趙老師。有待于繼續(xù)研究。在畢業(yè)設(shè)計(jì)的過程中,加強(qiáng)了對多線程的理解和掌控。這次畢業(yè)設(shè)計(jì)用到了,Swing,Socket,JSP,Struts2,AJAX,JDBC,Thread,JavaScript等各種技術(shù),采用MySQL作為數(shù)據(jù)庫,MyEclipse作為開發(fā)工具。本系統(tǒng)可以實(shí)現(xiàn)通訊系統(tǒng)最基本的兩個功能:一是雙方能夠互相收發(fā)信息,二是雙方能夠互傳文件。 } else (m)。ClientThread t = (receiverAccount)。}轉(zhuǎn)發(fā)文字信息時會判斷用戶是否在線:if (() == ()) {(() + send to+ () + at + ())。ClientThread t=(receiverAccount)。 } catch (IOException e) { // TODO Autogenerated catch block ()。 } } ()。 } if(()==4){ (()+ 發(fā)送給 +()+的文件 :+()+發(fā)送完成+\n)。 } if(()==0){ (()+拒絕接受文件 :+()+\n)。 } elseif(().intValue()==){ if(()==2){ (()+請求發(fā)送文件給 +()+:+\n)。 (圖片大小 :+().length+byte+\n)。 (\n)。 if(().intValue()==){ (()+ 發(fā)送消息給 +()+:+\n)。 if (!()) { ()。主要代碼如下:publicstaticvoid afterSend(Object o) { Message msg=(Message) o。 } }如果是圖片則顯示出,發(fā)送時間和圖片大小。 } if(()==2){ success()。 //重繪的邊界要比真實(shí)的稍微大點(diǎn) //只repaint一定區(qū)域,防止屏幕閃爍 repaint(x,y,w+2,h+2)。 w=(wwidth?w:width)。 width=()x。 int h=height。然后監(jiān)聽鼠標(biāo)事件,再用createScreenCapture(Rectangle先用new Robot().createScreenCapture(newRectangle(().getScreenSize()))。用戶被題下線后:圖511 用戶下線圖 其他功能的實(shí)現(xiàn) 截圖功能的實(shí)現(xiàn)截圖類的核心是JDK中:Robot類中createScreenCapture(Rectangle //在線人數(shù) (在線人數(shù): +())。 (getName()+下線)。 ()。 }finally{ close()。 (delete over)。 (1, account)。 }刪除用戶:publicvoid delete(Integer account){ conn=getConnection()。 }finally{ close()。 while(()){ rowCount=(1)。 } PreparedStatement p=(select count(*) from user)。 while(()){ User u=rowMapper(rs)。 (2, num)。try { ps=(FIND_BY_Limit)。圖510用戶管理圖關(guān)鍵代碼如下:以頁數(shù)列出用戶public ListUser findByLimit(int begin,int num){ ListUser list=new ArrayListUser()。 (m)。 } } } 2)服務(wù)器端代碼:服務(wù)端只負(fù)責(zé)轉(zhuǎn)發(fā),關(guān)鍵代碼如下:elseif(()==()){ Integer receiverAccount=()。 ().setVisible(false)。 ()。 }elseif (()==0){ //不同意發(fā)送 (chat, 對方拒絕接收文件, 通知, )。 ().setMinimum(0)。 //設(shè)置進(jìn)度條 ().setVisible(true)。 send(m)。 send(m)。 send(m)。 bos=new BufferedOutputStream(new FileOutputStream(f))。 if(mod==){ //如果選擇了路徑 File f=()。 ()。 (getter)。 Integer getter=()。 } }發(fā)送完成后,雙方的界面上都會顯示成功信息:圖58 文件傳輸成功圖客戶端接收文件的邏輯:文件的傳輸狀態(tài)被定義成了這幾種:0是不接受文件,1是接受文件,2請求發(fā)送文件,3文件傳輸中,4文件傳送完成客戶端接收文件是可根據(jù)這些狀態(tài),進(jìn)行操作,關(guān)鍵代碼如下://請求發(fā)送包 if(()==2){ //對話框 是否接收 int i=(chat, 確定接收 + ()+( +()+KB),接收文件,)。 } catch (FileNotFoundException e) { // TODO Autogenerated catch block ()。 (m)。 ((new ()))。// (0)。 (()+value)。 (m)。 BufferedInputStream bos=new BufferedInputStream(new FileInputStream(f))。 ()。// (true)。因?yàn)槲募赡鼙容^大,所以不能一次性發(fā)送,只能用線程分批發(fā)送。//文件大小 sendMessage(m)。//請求發(fā)送文件 int length=(int) (()/1000)。 (())。 SimpleDateFormat s = new SimpleDateFormat(yyyyMMdd HH:mm:ss)。 (ownerId)。 //發(fā)送數(shù)據(jù)包,請求發(fā)送文件 Message m = new Message()。 //只能選中文件 ()。關(guān)鍵代碼如下:Override publicvoid mouseClicked(MouseEvent e) { (選擇文件)。 } else (m)。 ClientThread t = (receiverAccount)。 // 如果是普通信息 if (() == ()) { (() + send to+ () + at + ())。 } }在客戶端顯示截圖示例:圖55聊天截圖2)服務(wù)端代碼 服務(wù)端接收到客戶端的信息后,只需要根據(jù)他的接收人,進(jìn)行轉(zhuǎn)發(fā)就可以。 //設(shè)置光標(biāo)到末尾 (())。 (new ImageIcon(()))。 try { //顯示發(fā)送人 和時間 ((), str, attrset)。 } returnnull。 } //將 byte[]轉(zhuǎn)換成image public Image bytesToImage(byte[] b){ try { return (new ByteArrayInputStream(b))。 } catch (IOException e) { ()。圖片和byte[]之間相互轉(zhuǎn)換的關(guān)鍵代碼如下://將image轉(zhuǎn)換成 byte[] publicbyte[] imageToBytes(Image img){ ByteArrayOutputStream bos=new ByteArrayOutputStream()。 } catch (BadLocationException e) { ()。 try { ((), str, attrset)。 Document docs = ()。顯示文字信息,顯示在JtextPane控件中SimpleAttributeSet attrset = new SimpleAttributeSet()。 //清空輸入 ()。 //發(fā)送 sendMessage(m)。 } 聊天模塊開始打開聊天窗口輸入數(shù)據(jù)接收數(shù)據(jù)發(fā)送數(shù)據(jù)顯示數(shù)據(jù)結(jié)束圖54聊天流程圖 關(guān)鍵代碼1)客服端代碼發(fā)送文字信息:客戶端發(fā)送和顯示信息的代碼被封裝在了IMChat extends JFrame implements ActionListener類中,其中發(fā)送文字信息的代碼[18]。 ( 失敗)。 } else { (3)。 //通知其他的用戶 ()。 (()+)。 } ()。 //查看是否有離線消息 LinkedListMessage list=(())。//好友列表 (m)。 (myself)。if (checkLogin(u)) { // 返回一個成功登陸的信息報 User myself=(())。 }如果驗(yàn)證成功,查找是否有他的離線消息,有就發(fā)送給他。 if(user!=null){ return ().equals(())。2)服務(wù)端代碼服務(wù)器端接收用戶驗(yàn)證信息的代碼被寫在了一個線程publicclassServerThread extends Thread中,這樣服務(wù)器就可以不停的監(jiān)聽端口,接收來自不同客戶端的請求,建立socket連接,也不會堵塞在主線程當(dāng)中[20]。 } returnnull。 } catch (IOException e) { ()。 Message ms = (Message) ()。 (o)。 } return success。 (()+)。 (())。 =fl。 User u=(User) o。// ()。 Message msg=(Message) (o)。登錄邏輯是在publicclass IMClientUserServer 里面,認(rèn)證成功者就會新建一個線程,專門負(fù)責(zé)接收服務(wù)器端發(fā)來的信息class ClientConnToServerThread extends Thread 。 } else (null, 用戶名或密碼錯誤, 錯誤, )。 } catch (IOException e1) { ()。 (())。 Message m=new Message()。 (new String(()))。 User u=new User()。 //登錄事件 (new ActionListener() { publicvoid actionPerformed(ActionEvent e) {// cus=new IMClientUserServer()。 } }網(wǎng)頁上顯示用戶的account圖52用戶注冊信息 流程圖開始填寫用戶信息驗(yàn)證用戶信息驗(yàn)證用戶信息 成功 失敗發(fā)送登錄失敗信息接收離線信息結(jié)束圖53登錄流程圖 關(guān)鍵代碼1)客戶端代碼 登錄事件是定義在class IMClientLogin extends JFram
點(diǎn)擊復(fù)制文檔內(nèi)容
外語相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1