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

正文內(nèi)容

基于java的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)(參考版)

2025-06-27 23:50本頁面
  

【正文】 我相信自己會(huì)在將來的軟件設(shè)計(jì)、開發(fā)過程中更進(jìn)一步地學(xué)習(xí),不斷提升自己的專業(yè)能力。通過這次的課程設(shè)計(jì),我充分體會(huì)到學(xué)習(xí)理論知識(shí)的重要性,但更加體會(huì)到動(dòng)手實(shí)踐的必要性?;旧习舜髮W(xué)所學(xué)習(xí) J2EE 和 J2SE 的所有知識(shí)。后臺(tái)還可以對(duì)用戶進(jìn)行管理。} 用戶界面的設(shè)計(jì) 登陸界面登陸界面的實(shí)現(xiàn)比較簡單,是 Jlabel ,JtextFeild,Jpanel等控件的集合39圖 513 用戶登錄界面 好友列表好友列表采用了絕對(duì)布局,用到了 CardLayout 和 JscrollPane:圖 514 好友列表界面40好友列表展開后:圖 515 好友列表展開界面 聊天界面雙擊好友頭像后,就會(huì)顯示出聊天界面:41圖 516 聊天界面42結(jié)語本系統(tǒng)采用 C/S 和 B/S 模式,聊天室頁面簡潔,操作便捷,穩(wěn)定可靠,性能優(yōu)良。if (t == null) {//不在線就暫時(shí)存儲(chǔ)在服務(wù)器上(receiverAccount, m)。Integer receiverAccount = ()。(m)。}} 服務(wù)端線程的實(shí)現(xiàn)在服務(wù)器上,截圖信息和文件信息都是進(jìn)行簡單的轉(zhuǎn)發(fā):if(()==()){Integer receiverAccount=()。()。(\n)。}if(()==1){(()+ 你同意接受文件 :+()+\n)。(文件名 :+()+ 文件大小: +()+KB+\n)。(\n)。}else if(().intValue()==){(()+ 發(fā)送圖片給 +()+:+\n)。(()+\n)。}BufferedWriter bw=new BufferedWriter(new FileWriter(f,true))。try {File f = new File(c:/+().toString()+.txt)。如果是文件則顯示出請(qǐng)求發(fā)送時(shí)間,同意接收時(shí)間,接收完成時(shí)間,和文件大小。dispose()。}如果點(diǎn)擊了鼠標(biāo)右鍵則取消截圖,雙擊確定截圖完成public void mouseClicked(MouseEvent e) {//如果是鼠標(biāo)右鍵的話if(()==){dispose()。h=(hheight?h:height)。height=()y。// (x+ +y+ +width+ +height+ )。然后監(jiān)聽鼠標(biāo)事件,再用createScreenCapture(Rectangle screenRect)方法截圖 .主要代碼如下:public void mouseDragged(MouseEvent e) {int w=width。先用new Robot().createScreenCapture(new Rectangle(().getScreenSize()))。//發(fā)送數(shù)據(jù)包通知下線notifyOffline()。//從線程集中刪去本線程((getName()))。//停止線程interrupt()。} }踢用戶下線的邏輯也很簡單,關(guān)閉 socket,將服務(wù)器端所對(duì)應(yīng)的線程停止,并且從線程集合中刪除改線程就可,關(guān)鍵代碼如下:(==========IOException==========)。} catch (SQLException e) {// TODO Autogenerated catch block()。()。35 try {ps=(DELETE)。}return list。}} catch (SQLException e) {// TODO Autogenerated catch block()。rs=()。(u)。rs=()。(1, begin)。conn=getConnection()。} 用戶管理模塊 流程圖開始登陸用戶增刪改查 查看在線用戶 踢用戶下線結(jié)束圖 510 web 用戶登錄圖 關(guān)鍵代碼用戶管理的前臺(tái)頁面是 jsp 頁面, 在頁面中可以對(duì)用戶進(jìn)行增刪改查。ClientThread t=(receiverAccount)。(new Color(0,0,255), 文件+()+( +()/1000+M)+接收完成 +\n)。}else if(()==4){(()+傳輸完成)。}else if (()==1){//同意發(fā)送(同意發(fā)送 )。(b)。().setMaximum(()/10)。 }}else if(()==3){//正在傳輸包byte b[]=()。 } }else{ (0)。 }else{ //選擇了取消或關(guān)閉對(duì)話框 (0)。 (1)。 f=new File(()+/+())。 int mod=(chat)。 //同意就發(fā)送同意接收數(shù)據(jù)包 if(i==){ //打開保存文件對(duì)話框 JFileChooser jfc=new JFileChooser(c:/)。 (sender)。 Integer sender=()。} catch (IOException e) {// TODO Autogenerated catch block()。//在窗口上顯示發(fā)送成功(new Color(0,0,255), 文件+()+( +()/1000000+M)+發(fā)送成功+ \n)。(4)。//發(fā)送完畢SimpleDateFormat s = new SimpleDateFormat(yyyyMMdd HH:mm:ss)。}(false)。int value=LENGTH/10000。while((num = (b)) != 1){(b)。(())。JProgressBar bar=()。線程關(guān)鍵代碼如下:正常發(fā)送文件:圖 58 文件傳輸圖Overridepublic void run() {30try {int num 。}對(duì)方會(huì)顯示提示信息:圖 57 詢問接收文件圖如果對(duì)方同意接收則開啟線程。(length)。//文件名(2)。//發(fā)送時(shí)間((new ()))。((()))。()。f=()。()。} 文件模塊 流程圖選擇文件請(qǐng)求發(fā)送文件確定接收選擇存放目錄對(duì)方拒絕接收同意接收發(fā)送文件接收文件圖 56 發(fā)送文件流程圖 關(guān)鍵代碼1)客戶端代碼在客戶端采用 JfileChooser 來瀏覽本地文件,點(diǎn)擊瀏覽按鈕后,會(huì)彈出對(duì)話框,讓用戶選擇文件,然后將文件名,大小等信息封裝在數(shù)據(jù)包里,發(fā)送出去。if (t == null) {//不在線就暫時(shí)存儲(chǔ)在服務(wù)器上(receiverAccount, m)。Integer receiverAccount = ()。關(guān)鍵代碼如下: Message m = (Message) receive()。} catch (BadLocationException e) {()。((), \n, attrset)。//設(shè)置光標(biāo)到末尾(())。}在JtextPane中顯示圖片的代碼:if(().intValue()==){//圖片信息String str=() + +()+ \n。} catch (IOException e) {()。}return ()。try {((RenderedImage) img, jpg, bos)。}}發(fā)送圖片信息:在發(fā)送圖片信息的時(shí)候,先將圖片轉(zhuǎn)換成為byte[]數(shù)組,包裝在信息包種發(fā)送出去,接收到圖片信息時(shí),從byte[]數(shù)組構(gòu)建圖片,顯示出來。//設(shè)置光標(biāo)到末尾(())。// 利用getDocument()方法取得JTextPane的Document//一般信息if(().intValue()==){String str=() + +()+\n+ + ()+ \n。(attrset,c)。25}當(dāng)用戶點(diǎn)擊發(fā)送按鈕后,先把先把信息顯示在自己的聊天窗口上,后方發(fā)送信息,自己發(fā)送的信息和接收到的信息用不同的顏色顯示。//在自己的Ouput上顯示 showMessage(m,)。}24 聊天模塊 流程圖開始打開聊天窗口輸入數(shù)據(jù) 接收數(shù)據(jù)顯示數(shù)據(jù)發(fā)送數(shù)據(jù)結(jié)束圖 54 聊天流程圖 關(guān)鍵代碼1)客服端代碼發(fā)送文字信息:客戶端發(fā)送和顯示信息的代碼被封裝在了IMChat extends JFrame implements ActionListener類中,其中發(fā)送文字信息的代碼//點(diǎn)擊的如果是發(fā)送buttonif (() == confirmButton) {Message m=(Message) makePackage(,null)。( 失敗)。} else {(3)。//通知其他的用戶()。(()+)。}()。//查看是否有離線消息LinkedListMessage list=(())。//好友列表(m)。(myself)。if (checkLogin(u)) {// 返回一個(gè)成功登陸的信息報(bào) User myself=(())。 }如果驗(yàn)證成功,查找是否有他的離線消息,有就發(fā)送給他。 if(user!=null){ return ().equals(())。2)服務(wù)端代碼服務(wù)器端接收用戶驗(yàn)證信息的代碼被寫在了一個(gè)線程public class ServerThread extends Thread中,這樣服務(wù)器就可以不停的監(jiān)聽端口,接收來自不同客戶端的請(qǐng)求,建立socket 連接,也不會(huì)堵塞在主線程當(dāng)中。}return null。} catch (IOException e) {()。Message ms = (Message) ()。(o)。}return success。(()+)。(())。=fl。User u=(User) o。// ()。Message msg=(Message) (o)。登錄邏輯是在public class IMClientUserServer 里面,認(rèn)證成功者就會(huì)新建一個(gè)線程,專門負(fù)責(zé)接收服務(wù)器端發(fā)來的信息class ClientConnToServerThread extends Thread 。}else(null, 用戶名或密碼錯(cuò)誤, 錯(cuò)誤, )。} catch (IOException e1) {()。(())。Message m=new Message()。(new String(()))。User u=new User()。//登錄事件(new ActionListener() {public void actionPerformed(ActionEvent e) {// cus=new IMClientUserServer()。} }網(wǎng)頁上顯示用戶的 account圖 52 用戶注冊(cè)信息20 登錄模塊 流程圖 開始填寫用戶信息驗(yàn)證用戶信息驗(yàn)證用戶結(jié)束接收離線信息成功失敗發(fā)送登陸失敗信息圖 53 登錄流程圖 關(guān)鍵代碼 1)客戶端代碼 登錄事件是定義在class IMClientLogin extends JFrame 這個(gè)類
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1