版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> Java課程設(shè)計(jì)報(bào)告</p><p> 題 目 “即時(shí)通”網(wǎng)絡(luò)通信系統(tǒng)的設(shè)計(jì)與開發(fā) </p><p> 完成日期 2014年12月26日</p><p><b> 課程設(shè)計(jì)報(bào)告單</b></p><p> 《Java課程設(shè)計(jì)》任務(wù)書</p>
2、<p> 一、課程設(shè)計(jì)任務(wù)及要求:</p><p> 任務(wù):針對(duì)小型信息管理系統(tǒng)或若干綜合性設(shè)計(jì)題目,選擇一種軟件開發(fā)模型,完成從需求分析、系統(tǒng)設(shè)計(jì)、系統(tǒng)實(shí)現(xiàn),軟件測(cè)試的全過程。</p><p><b> 要求:</b></p><p> (1)根據(jù)軟件系統(tǒng)開發(fā)的一般原則,完成相應(yīng)系統(tǒng)的功能設(shè)計(jì),完成主要功能模塊的程序?qū)崿F(xiàn)
3、并進(jìn)行測(cè)試訓(xùn)練,給出代碼運(yùn)行結(jié)果和相應(yīng)的設(shè)計(jì)文檔??梢苑纸M進(jìn)行,但所有學(xué)生必須經(jīng)歷整個(gè)系統(tǒng)的開發(fā)全過程,以便加深對(duì)系統(tǒng)開發(fā)全過程的認(rèn)識(shí)。</p><p> ?。?)提交課程設(shè)計(jì)報(bào)告。</p><p> ?。?)指標(biāo): 要求完成課程設(shè)計(jì)報(bào)告3000字以上(約二十頁(yè));完成所設(shè)計(jì)的題目,設(shè)計(jì)題目的語(yǔ)句行數(shù)的和在200行語(yǔ)句以上。</p><p><b> 二
4、、工作量</b></p><p> 2周(10個(gè)工作日)時(shí)間</p><p><b> 三、計(jì)劃安排</b></p><p> 第1個(gè)工作日-第2個(gè)工作日:查找相關(guān)資料、書籍,閱讀示例文檔;設(shè)計(jì)程序結(jié)構(gòu)、模塊圖、完成類的設(shè)計(jì)。</p><p> 第3個(gè)工作日-第7個(gè)工作日:完成程序的編碼,并且自己調(diào)試
5、、測(cè)試。穿插進(jìn)行項(xiàng)目文檔的撰寫。</p><p> 第8個(gè)工作日-第9個(gè)工作日:撰寫和整理項(xiàng)目文檔。</p><p> 第10個(gè)工作日:由教師檢查軟件測(cè)試效果、項(xiàng)目文檔,給出學(xué)生本課程成績(jī)。</p><p><b> 指導(dǎo)教師簽字:</b></p><p> 2014年12月15日</p><
6、p><b> 目錄</b></p><p><b> 題目:1</b></p><p><b> 1.需求分析1</b></p><p><b> 2.概要設(shè)計(jì)1</b></p><p> 2.1系統(tǒng)總的設(shè)計(jì)思路1</p>
7、;<p><b> 2.2體系結(jié)構(gòu)1</b></p><p> 2.3功能模塊圖1</p><p><b> 3.詳細(xì)設(shè)計(jì)3</b></p><p><b> 4.編碼3</b></p><p> 4.1在登陸界面設(shè)置用戶名和密碼不能為空并給出提
8、示3</p><p> 4.2如果用戶登陸成功如何直接進(jìn)入聊天界面.3</p><p> 4.3如何設(shè)置性別,是用戶注冊(cè)后性別顯示在數(shù)據(jù)庫(kù)表中4</p><p><b> 5.調(diào)試分析5</b></p><p> 6.測(cè)試結(jié)果及運(yùn)行效果5</p><p> 7.系統(tǒng)開發(fā)所用到的
9、技術(shù)8</p><p> 8.課程設(shè)計(jì)總結(jié)8</p><p><b> 參考文獻(xiàn)9</b></p><p> 附錄 全部代碼10</p><p><b> 題目:</b></p><p> “即時(shí)通”網(wǎng)絡(luò)通信系統(tǒng)的設(shè)計(jì)與開發(fā)</p><p
10、><b> 1.需求分析</b></p><p> 《即時(shí)通》,是一個(gè)類似于QQ的網(wǎng)絡(luò)通訊軟件,系統(tǒng)包含了登陸界面,注冊(cè)界面和聊天界面。用戶通過登陸進(jìn)入聊天界面和好友進(jìn)行聊天,用戶如果沒登陸的用戶名和密碼可以通過注冊(cè)后再登錄進(jìn)入聊天界面和好友聊天。</p><p><b> 2.概要設(shè)計(jì)</b></p><p>
11、; 使用JAVA開發(fā)一個(gè)類似QQ的網(wǎng)絡(luò)通訊系統(tǒng),該系統(tǒng)能夠進(jìn)行用戶管理,聊天通訊及系統(tǒng)管理。 該聊天室系統(tǒng)包括客戶端和服務(wù)器端。本系統(tǒng)使用JAVA SWING技術(shù)進(jìn)行前臺(tái)界面的設(shè)計(jì)和開發(fā), 使用Socket 與 ServerSocket網(wǎng)絡(luò)編程進(jìn)行客戶端與服務(wù)器端的連接與通信,使用Java輸入輸出流進(jìn)行客戶端與服務(wù)器端之間的數(shù)據(jù)傳輸,使用JDBC技術(shù)與后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行連接和訪問。該系統(tǒng)將能夠?qū)崿F(xiàn)用戶登錄功能,并能對(duì)用戶信息進(jìn)行增加,刪除
12、,修改和查詢。登錄的用戶將可以進(jìn)行群發(fā),私聊及文件發(fā)送和接收。</p><p><b> 系統(tǒng)總體架構(gòu)如下:</b></p><p> 圖2-1 即時(shí)通總體框架圖</p><p> 2.1系統(tǒng)總的設(shè)計(jì)思路</p><p> 首先設(shè)計(jì)系統(tǒng)管理,其次設(shè)計(jì)用戶管理,再次設(shè)計(jì)通訊,最后設(shè)計(jì)數(shù)據(jù)庫(kù)操作。</p>
13、<p><b> 2.2體系結(jié)構(gòu)</b></p><p> 具體為客戶端的設(shè)計(jì),服務(wù)端的設(shè)計(jì)和公共端的設(shè)計(jì)。</p><p><b> 2.3功能模</b></p><p> 圖2-2各功能模塊流程圖</p><p> 表2-1 個(gè)模塊主要任務(wù)</p><
14、p><b> 3.詳細(xì)設(shè)計(jì)</b></p><p> 1 “即時(shí)通”系統(tǒng)包括三個(gè)工程,工程一包括四個(gè)程序,分別為:登陸(Login.java),注冊(cè)(Register.java),聊天(Chat.java),客戶工作者(ClientWorker.java);工程二包括四個(gè)程序,分別為:DB幫助者(DBHelper.jav</p><p> a),信息(Me
15、ssage.java),信息服務(wù)(MessageService.java),用戶(User.java);</p><p> 工程三包括兩個(gè)程序,分別為:服務(wù)器(QQServer.java),服務(wù)器(ServerWor</p><p> ker.java)。</p><p> 2 運(yùn)行服務(wù)器QQServer.java程序,在運(yùn)行客戶端的登陸,客戶可以在登陸界面
16、輸入自己的用戶名和密碼點(diǎn)擊“登陸”,如果用戶名和密碼都正確,點(diǎn)擊“登陸”按鈕會(huì)彈出提示框“登陸成功”,點(diǎn)擊“確定”按鈕將會(huì)進(jìn)入到聊天界面;如果用戶名或密碼錯(cuò)誤點(diǎn)擊“登陸”按鈕會(huì)彈出提示框“登陸失敗”,如果用戶名或密碼為空點(diǎn)擊“登陸”按鈕會(huì)彈出提示框“用戶名或密碼不能為空”,如果點(diǎn)擊“取消”按鈕,你的用戶名和密碼將會(huì)被清空,點(diǎn)擊“注冊(cè)”,會(huì)直接進(jìn)入注冊(cè)界面。</p><p> 3 運(yùn)行服務(wù)器QQServer.ja
17、va程序,在運(yùn)行客戶端的注冊(cè),客戶可以在注冊(cè)界面輸入自己的用戶名,密碼,確認(rèn)密碼,昵稱,性別,愛好,城市,職稱。如果用戶名和密碼錯(cuò)誤會(huì)彈出注冊(cè)失敗,如果用戶名寫了,密碼沒寫會(huì)彈出提示框“密碼不能為空”,如果密碼寫了,密碼沒寫會(huì)彈出提示框“用戶名不能為空”,如果用戶名和密碼注冊(cè)過,會(huì)彈出提示框該“用戶已存在,請(qǐng)更換用戶名”。如果用戶名,密碼,確認(rèn)密碼都正確會(huì)彈出提示框“注冊(cè)成功”。昵稱,性別,愛好,城市,職稱可以不寫。</p>
18、<p> 4 運(yùn)行服務(wù)器QQServer.java程序,在運(yùn)行客戶端的登陸,登陸成功后,客戶進(jìn)入到聊天界面??梢赃B續(xù)登陸無數(shù)個(gè)用戶,他們可以同時(shí)和其他的人聊天,輸入要發(fā)送的內(nèi)容再選中對(duì)象即可,如果在輸入內(nèi)容沒有選擇發(fā)送的對(duì)象將會(huì)彈出提示框“請(qǐng)選擇好友”,如果沒有輸入內(nèi)容就發(fā)送給好友將會(huì)彈出提示框“輸入內(nèi)容不能為空”。</p><p><b> 4.編碼</b></p&
19、gt;<p> 4.1在登陸界面設(shè)置用戶名和密碼不能為空并給出提示?</p><p> 解決方案:用if語(yǔ)句寫一段代碼:</p><p> String name = nameItem1.getText();</p><p> if(name== null ||"".equals(name)){</p><
20、;p> JOptionPane.showMessageDialog(this,"用戶名不能為空,請(qǐng)重新輸入。","異常提示",JOptionPane.ERROR_MESSAGE);</p><p><b> return;</b></p><p><b> }</b></p>&l
21、t;p> char[] pwd=pwdItem1.getPassword();</p><p> String pwd1 = new String(pwd);</p><p> if(pwd.length==0){</p><p> JOptionPane.showMessageDialog(this,"密碼不能為空,請(qǐng)重新輸入。"
22、,"異常提示",JOptionPane.ERROR_MESSAGE);</p><p><b> return;</b></p><p><b> }</b></p><p> 4.2如果用戶登錄成功如何直接進(jìn)入聊天界面?</p><p> 解決方案:在點(diǎn)擊“確定”按鈕事
23、件,加上聊天界面的代碼,代碼如下:</p><p> String r=(String)result11.getBody();</p><p> if(r==null){//登陸成功</p><p> JOptionPane.showMessageDialog(this,"登陸成功","彈出提示", JOptionPa
24、ne.INFORMATION_MESSAGE);</p><p> java.awt.EventQueue.invokeLater(new Runnable() {</p><p> public void run() {</p><p> new Chat(u,s).setVisible(true);</p><p><b>
25、; }</b></p><p><b> });</b></p><p> this.dispose();</p><p><b> }</b></p><p> 4.3如何設(shè)置性別,使用戶注冊(cè)后性別顯示在數(shù)據(jù)庫(kù)表中?</p><p> 解決方案:在登
26、錄代碼final User u = new User(name,pwd1l);</p><p> 中填入null,在注冊(cè)代碼 添加:</p><p> String Sex=null;</p><p> if(Item1.isSelected())</p><p> Sex=Item1.getText();</p>&l
27、t;p> else if (Item2.isSelected())</p><p> Sex=Item2.getText();</p><p> else if (Item3.isSelected())</p><p> Sex=Item3.getText();</p><p> else if(Item4.isSelecte
28、d())</p><p> Sex=Item4.getText();</p><p> 在DBHelper.java代碼 </p><p> pstm=con.prepareStatement("insert into modo (userName,userPwd,userSex) + " valu
29、es(?,?,?)");modo中添加userSex,values中加入?</p><p> 在代碼 pstm.setString(1, u.getUserName());</p><p> pstm.setString(2,u.getUserPwd());</p><p> 中加入pstm.setString(4,u.getUserSex());&
30、lt;/p><p> 在User.java中加入 private String userSex;</p><p> public User(String userName, String userPwd ,String userSex) {</p><p> this.userSex = userSex;</p><p><b>
31、 }</b></p><p> public String getUserSex() {</p><p> return userSex;</p><p><b> }</b></p><p> public void setUserSex(String userSex) {</p>
32、<p> this.userSex = userSex;</p><p><b> }</b></p><p> 在數(shù)據(jù)庫(kù)表設(shè)計(jì)表中加userSex即可。</p><p> 測(cè)試:用Access數(shù)據(jù)庫(kù)制作表格,配置數(shù)據(jù)源,運(yùn)行QQserver,在運(yùn)行登陸,注冊(cè),聊天。</p><p> 問題1:如果該
33、用戶已經(jīng)登陸成功沒有下怎么能使該用戶不能再次登陸。</p><p> 解決方案:用if語(yǔ)句判斷該用戶是否已登錄,若已登錄則再次登陸時(shí)顯示登陸失敗。代碼如下:</p><p> if(usersOnLine.containsKey(u)){</p><p> return "用戶已經(jīng)登陸";</p><p><b
34、> }</b></p><p> //檢測(cè)用戶名是否存在</p><p> if(!DBHelper.getInstance().isUserExistes(u.getUserName())){</p><p> return "用戶已存在";</p><p><b> }</b
35、></p><p> 問題2:若用戶輸入的消息后沒有選中好友就發(fā)送怎么提示用戶沒有選中好友?</p><p> 解決方案:用數(shù)組合if語(yǔ)句來編寫如下代碼</p><p> String Username;</p><p> Object[] listname=usersListItem.getSelectedValues();&
36、lt;/p><p> if(listname.length==0){</p><p> JOptionPane.showMessageDialog(this,"請(qǐng)選擇聊天好友。","異常提示",JOptionPane.INFORMATION_MESSAGE);</p><p><b> return;</b&
37、gt;</p><p><b> 5.調(diào)試分析</b></p><p> 在用戶登陸的過程中,若用戶輸入的密碼錯(cuò)誤,則給出提示并讓用戶重新輸入密碼;在用戶注冊(cè)的過程中,若用戶不小心把注冊(cè)信息填寫錯(cuò)誤,則給出提示并讓用戶重新填寫注冊(cè)信息;在通訊過程中,聊天內(nèi)容發(fā)送錯(cuò)誤系統(tǒng)不會(huì)給出提示,如果是文件發(fā)送錯(cuò)誤,在沒有發(fā)送成功是用戶可以主動(dòng)的取消發(fā)送,經(jīng)過一系列的分析調(diào)試最
38、終把問題解決了</p><p> 6.測(cè)試結(jié)果及運(yùn)行效果</p><p> ?。?)程序運(yùn)行時(shí),則系統(tǒng)管理界面顯示如圖6-1所示:</p><p> 圖6-1系統(tǒng)廣利界面的顯示效果</p><p> ?。?)程序運(yùn)行時(shí),則用戶管理界面顯示如圖6-2所示:</p><p> 圖6-2 用戶注冊(cè)的界面</p&g
39、t;<p> ?。?)程序運(yùn)行時(shí),則用戶聊天界面顯示如圖6-3所示:</p><p> 7.系統(tǒng)開發(fā)所用到的技術(shù)</p><p> Microsoft Windows XP</p><p> NetBeans IDE</p><p><b> Access數(shù)據(jù)庫(kù)</b></p><
40、;p><b> Java程序組件</b></p><p><b> 8.課程設(shè)計(jì)總結(jié)</b></p><p> 經(jīng)過兩周的JAVA課程設(shè)計(jì)的實(shí)習(xí),在老師的細(xì)心指導(dǎo)下,我發(fā)現(xiàn)了JAVA語(yǔ)言的價(jià)值所在,盡管上了十五周的JAVA課,但是我覺得我沒學(xué)到什么東西,有的代碼還看不懂,更不用說寫一個(gè)好的程序出來。</p><p&
41、gt; 老師從設(shè)計(jì)界面開始,一直教到我們把基本程序都做出來,我們就像剛出生的孩子一樣什么都不會(huì),如果沒有老師的指導(dǎo),我覺得我們絕不可能設(shè)計(jì)開發(fā)出這個(gè)程序。網(wǎng)上說JAVA語(yǔ)言很有前景,未來的市場(chǎng)很好,現(xiàn)在很多地方都應(yīng)用了,之前都不知道它到底是怎么創(chuàng)出那么多的財(cái)富的,書上寫的都是代碼。一直對(duì)著書看代碼還真看不出它的作用。現(xiàn)在的大型銀行和企業(yè)的系統(tǒng)都是用JAVA語(yǔ)言設(shè)計(jì)開發(fā)出發(fā)的。老師鼓勵(lì)我們好好學(xué)它對(duì)我們今后的生活有利,學(xué)好了我們今后將會(huì)
42、容易找到工作。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 呂鳳翥,馬皓. Java語(yǔ)言程序設(shè)計(jì)(第2版)[M].北京:清華大學(xué)出版社,2010</p><p><b> 期刊 </b></p><p> [2] 石振國(guó). 用JSP實(shí)現(xiàn)對(duì)Web數(shù)據(jù)庫(kù)的訪問[J].
43、計(jì)算機(jī)應(yīng)用,2010(05):5-8.</p><p> [4] 薩師煊,王珊.《數(shù)據(jù)庫(kù)系統(tǒng)概論》高等教育出版社,2002年2月</p><p> [5] 耿祥義,張躍平。《java2實(shí)用教程》第四版清華大學(xué)出版社2012年8月第4版</p><p><b> 附錄 全部代碼</b></p><p> Chart
44、Gui.java</p><p> public class ChartGui extends javax.swing.JFrame {</p><p> private User u;</p><p> private Socket s;//就是登陸成功的管道</p><p> final static int MAXUSER=10
45、0; //最多可同時(shí)聊天一百個(gè)人</p><p> public ChartGui() {</p><p> initComponents();</p><p><b> }</b></p><p> public JList getUsersList() {</p><p> r
46、eturn ListItem;</p><p><b> }</b></p><p> public void setchat2Item(String usersChart) {</p><p> String s=this.chat2Item.getText()+usersChart;</p><p> thi
47、s.chat2Item.setText(s);</p><p><b> }</b></p><p> /** Creates new form ChartGui */</p><p> public ChartGui(User u,Socket s) {</p><p> initComponents();&l
48、t;/p><p><b> this.u=u;</b></p><p><b> this.s=s;</b></p><p> this.setTitle(u.getUserName());</p><p> //秘書類,用以不斷的接收消息</p><p> new C
49、lientWorker(s,this).start();</p><p><b> }</b></p><p> public void addUsers(List<User> list){</p><p> DefaultListModel dlm=(DefaultListModel)ListItem.getModel();
50、</p><p> for(User u:list){</p><p> dlm.addElement(u);</p><p><b> }</b></p><p><b> }</b></p><p> public void addNewUser(User u)
51、{</p><p> DefaultListModel dlm=(DefaultListModel)ListItem.getModel();</p><p> dlm.addElement(u);</p><p><b> }</b></p><p> public void delUser(User curu)
52、 {</p><p> DefaultListModel dlm=(DefaultListModel)ListItem.getModel();</p><p> dlm.removeElement(curu);</p><p><b> }</b></p><p> private void jButton4Ac
53、tionPerformed(java.awt.event.ActionEvent evt) { </p><p> // TODO add your handling code here:</p><p> User[] NUser=new User[MAXUSER];</p><p&g
54、t; String UsersName;</p><p><b> int i=0;</b></p><p> // =usersList.getSelectedValues();</p><p> for(Object a:ListItem.getSelectedValues()){</p><p> NUs
55、er[i]=(User)a;</p><p><b> i++;</b></p><p><b> }</b></p><p><b> int j=0;</b></p><p> UsersName=NUser[j].getUserName();</p>
56、<p><b> j++;</b></p><p> for(;NUser[j]!=null;j++){</p><p> UsersName=UsersName+","+NUser[j].getUserName();</p><p><b> }</b></p>&l
57、t;p> String text= chatItem.getText();</p><p> if(NUser==null){</p><p> JOptionPane.showMessageDialog(this, "請(qǐng)?jiān)谠诰€好友中選擇你要聊天的好友", "異常提示", JOptionPane.INFORMATION_MESSAGE);
58、</p><p><b> return;</b></p><p><b> }</b></p><p> if(text==null){</p><p> JOptionPane.showMessageDialog(this, "發(fā)送信息不能為空!", "異常
59、提示", JOptionPane.INFORMATION_MESSAGE);</p><p><b> return;</b></p><p><b> }</b></p><p><b> else{</b></p><p> String UsersTex
60、t=this.chat2Item.getText()+"\n"+"您對(duì)"+UsersName+"說:\n"+this.chatItem.getText()+"\n";</p><p> chatItem.setText(null);</p><p> this.chat2Item.setText(Users
61、Text);</p><p> Message chartM=new Message(4,u,NUser,text);</p><p> MessageService.getInstance().sendMsg(chartM, s);</p><p><b> }</b></p><p> public JLis
62、t getListItem() {</p><p> return ListItem;</p><p><b> }</b></p><p> public void setUsersChartText(String usersChart) {</p><p> String s=this.chat2Item.g
63、etText()+usersChart;</p><p> this.chat2Item.setText(s);</p><p><b> }</b></p><p><b> LoginGui</b></p><p> public Socket connectServer(){</
64、p><p> Socket s=null;</p><p><b> try{</b></p><p> s=new Socket("127.27.21.21",6666);</p><p><b> }</b></p><p> catch(Exc
65、eption e){</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> return s;</b></p><p><b> }</b></p><p> private
66、 void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { </p><p> // TODO add your handling code here:</p><p> final LoginGui gui=this;</p>
67、<p> java.awt.EventQueue.invokeLater(new Runnable() {</p><p> public void run() {</p><p> RegisterGUI dialog = new RegisterGUI(gui, true);</p><p> dialog.setLocationRelat
68、iveTo(gui);</p><p> dialog.setVisible(true); }</p><p> private void jButton3MouseClicked(java.awt.event.MouseEvent evt) { </p><p> // TODO ad
69、d your handling code here:</p><p><b> } </b></p><p> private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { </p>
70、<p> // TODO add your handling code here:</p><p> nameItem.setText(null);</p><p> pwdItem.setText(null);</p><p> this.dispose();</p><p> }
71、 </p><p> private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { </p><p> String name=nameItem.getText();</p>
72、<p> System.out.println("用戶名:"+name);</p><p> char[] pwd=pwdItem.getPassword();</p><p> String pwd1=new String(pwd);</p><p> System.out.println("密碼:"+pw
73、d1);</p><p> if(name==null||"".equals(name ))</p><p><b> {</b></p><p> JOptionPane.showMessageDialog(this,"用戶名不可為空","異常提示",JOptionPane.E
74、RROR_MESSAGE);</p><p><b> return;</b></p><p> } // TODO add your handling code here:</p><p> if(pwd==null||"".equals(pwd1))</p><p><b
75、> {</b></p><p> JOptionPane.showMessageDialog(this,"密碼不可為空","異常提示",JOptionPane.ERROR_MESSAGE);</p><p><b> return;</b></p><p><b> }
76、</b></p><p> //發(fā)送name 和pwd到服務(wù)器</p><p><b> //連接服務(wù)端</b></p><p> final Socket s=this.connectServer();</p><p><b> //構(gòu)造消息</b></p>&l
77、t;p> final User u=new User(name,pwd1,null,null,null); //以后只發(fā)送u代表它們</p><p> Message msg=new Message(1,u); //0 代表登陸</p><p><b> //執(zhí)行發(fā)送</b></p><p> MessageService.ge
78、tInstance().sendMsg(msg,s);</p><p> //接受消息【接收登陸結(jié)果】</p><p> Message result=MessageService.getInstance().receiveMsg(s);//收消息只傳管道Sokect s</p><p> // 取出登陸成功的標(biāo)志</p><p>
79、String r=(String)result.getBody();</p><p> if(r==null){//注冊(cè)成功</p><p> JOptionPane.showMessageDialog(this, "登陸成功", "提示", JOptionPane.INFORMATION_MESSAGE);</p><p&g
80、t;<b> //打開聊天界面</b></p><p> java.awt.EventQueue.invokeLater(new Runnable() {</p><p> public void run() {</p><p> new ChartGui(u,s).setVisible(true);</p><p&
81、gt;<b> }</b></p><p><b> });</b></p><p> this.dispose();</p><p><b> }</b></p><p><b> else{</b></p><p>
82、 JOptionPane.showMessageDialog(this, "登陸失敗:"+r+"! 請(qǐng)重試.", "提示", JOptionPane.ERROR_MESSAGE);</p><p><b> }</b></p><p> ServerWorker </p><p>
83、; public class ServerWorker extends Thread {</p><p> private static Map<User, Socket> usersOnLine = new HashMap<User, Socket>();</p><p> private Socket s;</p><p> Se
84、rverWorker(Socket s) {</p><p> this.s = s;</p><p> public void run() {</p><p><b> //處理客戶端請(qǐng)求</b></p><p> //(1)注冊(cè)的 (2)登陸的 (3) 聊天的。。。。。</p><p
85、> //接收消息 s MessageSercie</p><p> while (true) {</p><p> Message msg = MessageService.getInstance().receiveMsg(s);</p><p> //根據(jù)消息類型判斷處理</p><p> if (msg.getTyp
86、e() == 0) {//注冊(cè) //客戶端注冊(cè)的消息</p><p><b> //取出用戶信息</b></p><p> User u = (User) msg.getBody();</p><p> String result = register(u);//執(zhí)行注冊(cè),result是注冊(cè)結(jié)果(kong :成功 "xxx&
87、quot;失敗</p><p> //把注冊(cè)結(jié)果發(fā)給客戶端</p><p> Message msg1 = new Message();</p><p> msg1.setBody(result);</p><p> MessageService.getInstance().sendMsg(msg1, s);</p>&
88、lt;p> break;//注冊(cè)成功后,不需要收消息</p><p> } else if (msg.getType() == 1) {//登陸</p><p><b> //取出用戶信息</b></p><p> User u = (User) msg.getBody();</p><p> Strin
89、g result = login(u);//執(zhí)行注冊(cè),result是注冊(cè)結(jié)果(kong :成功 "xxx"失敗</p><p> //把注冊(cè)結(jié)果發(fā)給客戶端</p><p> Message msg1 = new Message();</p><p> msg1.setBody(result);</p><p>
90、MessageService.getInstance().sendMsg(msg1, s);</p><p> //登陸成功的情況下,才會(huì)處理</p><p> if (result == null) {</p><p> //處理在線用戶問題</p><p> //給剛登陸的用戶發(fā)送在線用戶列表</p><p&g
91、t; Set users1 = usersOnLine.keySet();//裝有所有在線用戶的集合 Set不能再網(wǎng)絡(luò)傳遞</p><p> List<User> users = new ArrayList<User>();</p><p> users.addAll(users1);//把集合中的用戶加入鏈表</p><p> //
92、把集合(users1)發(fā)送給剛登陸的客戶(u)</p><p><b> //構(gòu)造消息</b></p><p> Message msg2 = new Message(2, users);</p><p> //發(fā)送消息 給當(dāng)前登陸用戶發(fā)---管道s</p><p> MessageService.getIn
93、stance().sendMsg(msg2, s);</p><p> //給已經(jīng)登陸過的用戶發(fā)送新用戶上線消息</p><p> Message newUserMsg = new Message(3, u);</p><p> for (User cur : users) {//循環(huán)中的每個(gè)用戶都要發(fā)一次消息</p><p> //
94、獲取用戶對(duì)應(yīng)的管道</p><p> Socket curS = usersOnLine.get(cur);//根據(jù)用戶,獲取其存在map中的管道</p><p> MessageService.getInstance().sendMsg(newUserMsg, curS);</p><p><b> }</b></p>&
95、lt;p> //還要把剛登陸的用戶加入在線列表Map</p><p> usersOnLine.put(u, s);//登陸成功的管道</p><p><b> }</b></p><p><b> }</b></p><p> else if (msg.getType() == 4
96、) {//聊天</p><p><b> int i=0;</b></p><p><b> do{</b></p><p> User curu=msg.getTos()[i]; //得到用戶要發(fā)送信息的目的地</p><p> //獲取用戶對(duì)應(yīng)的管道</p>
97、<p> Socket curS=usersOnLine.get(curu);//根據(jù)用戶,獲取其存在map中的管道</p><p> Message userM2=new Message(4,msg.getSend(),msg.getbody());</p><p> MessageService.getInstance().sendMsg(userM2, curS);
98、</p><p><b> i++;</b></p><p> }while(msg.getTos()[i]!=null);</p><p><b> }</b></p><p> else if (msg.getType() == 5) {//離線操作</p><p&g
99、t; User curu = (User) msg.getBody();//取出藥離線的客戶</p><p><b> //清除離線用戶</b></p><p> usersOnLine.remove(curu);</p><p> //把離線消息發(fā)給每個(gè)在線用戶</p><p> Set<User>
100、; users = usersOnLine.keySet();//獲取所有在線用戶</p><p> for (User cur : users) {</p><p> //獲取每個(gè)用戶的管道</p><p> Socket curs = usersOnLine.get(cur);</p><p><b> // 轉(zhuǎn)發(fā)離線消
101、息</b></p><p> MessageService.getInstance().sendMsg(msg, curs);</p><p><b> }</b></p><p><b> break;</b></p><p> } //..............</p
102、><p><b> else {</b></p><p> System.out.println("消息類型不爭(zhēng)取。。。。。。");</p><p><b> }</b></p><p> private String register(User u) {</p>
103、<p> //檢測(cè)用戶名是否存在</p><p> if (DBHelper.getInstance().isUserExistes(u.getUserName())) {</p><p> return "用戶名已經(jīng)存在";</p><p><b> }</b></p><p>
104、;<b> //執(zhí)行注冊(cè)</b></p><p> if (DBHelper.getInstance().doRegister(u)) {</p><p> return null;//注冊(cè)成功,返回空</p><p><b> } else {</b></p><p> return &
105、quot;注冊(cè)失敗,請(qǐng)聯(lián)系管理員";</p><p><b> }</b></p><p> private String login(User u) {</p><p> if(usersOnLine.containsKey(u)){</p><p> return"該用戶已陸";
106、}</p><p> //檢測(cè)用戶名是否存在</p><p> if (!DBHelper.getInstance().isUserExistes(u.getUserName())) {</p><p> return "用戶名不存在,請(qǐng)注冊(cè)";</p><p><b> }</b></
107、p><p><b> //執(zhí)行登陸</b></p><p> if (DBHelper.getInstance().doLogin(u)) {</p><p> return null;//注冊(cè)成功,返回空</p><p><b> } else {</b></p><p&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告----基于tcp的點(diǎn)對(duì)點(diǎn)即時(shí)通信工具
- 網(wǎng)絡(luò)通信課程設(shè)計(jì)
- 校園即時(shí)通訊設(shè)計(jì)與開發(fā)課程設(shè)計(jì)
- 網(wǎng)絡(luò)即時(shí)通信系統(tǒng)的分析與設(shè)計(jì).pdf
- 網(wǎng)絡(luò)通信課程設(shè)計(jì)--公寓網(wǎng)絡(luò)設(shè)計(jì)
- java課程設(shè)計(jì)---即時(shí)聊天系統(tǒng)
- 網(wǎng)絡(luò)通信winsock課程設(shè)計(jì)
- 企業(yè)即時(shí)通工作管理系統(tǒng)的設(shè)計(jì)與開發(fā).pdf
- 基于java的即時(shí)通訊的設(shè)計(jì)與開發(fā)
- 基于GPRS的即時(shí)通信系統(tǒng)協(xié)議設(shè)計(jì)與開發(fā).pdf
- 主流即時(shí)通軟件通信監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 即時(shí)通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 基于Java的網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于java的即時(shí)通訊系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)【開題報(bào)告】
- java網(wǎng)絡(luò)通信系統(tǒng)的研究與開發(fā)(論文+源代碼+開題報(bào)告)
- 基于智慧協(xié)同網(wǎng)絡(luò)的即時(shí)通信平臺(tái)設(shè)計(jì)與開發(fā).pdf
- 基于CDMA網(wǎng)絡(luò)的即時(shí)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 即時(shí)通監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 即時(shí)通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- DTPhone即時(shí)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
評(píng)論
0/150
提交評(píng)論