2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論