多人聊天系統(tǒng)的設(shè)計與實現(xiàn)課程設(shè)計說明書_第1頁
已閱讀1頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  摘 要</b></p><p>  本課程設(shè)計主要是設(shè)計并實現(xiàn)一個簡單的多人聊天程序,該聊天程序能夠支持多人聊天,聊天的內(nèi)容可以僅僅支持文本信息,聊天程序包括服務(wù)器程序和客戶端程序。在課程設(shè)計中系統(tǒng)的開發(fā)平臺為Eclipse程序運行平臺為Windows XP。</p><p>  關(guān)鍵詞:聊天程序;服務(wù)器;客戶端;Eclipse&l

2、t;/p><p><b>  目 錄</b></p><p><b>  1 課題描述1</b></p><p><b>  2 設(shè)計過程2</b></p><p>  2.1服務(wù)器模塊3</p><p>  2.2客戶端模塊3</p>

3、;<p>  2.3信息處理模塊4</p><p><b>  2.4源代碼4</b></p><p><b>  3 測試11</b></p><p><b>  總結(jié)13</b></p><p><b>  參考文獻14</b>

4、</p><p><b>  1 課題描述</b></p><p>  隨著社會發(fā)展,Internent的迅速普及,人們對實時通信的要求越來越迫切,需求日益增加,網(wǎng)絡(luò)聊天已經(jīng)成為了一大時尚,不少人都有這樣的經(jīng)歷??蛻艨蛻舳?服務(wù)器模式是一種能夠在基于網(wǎng)絡(luò)環(huán)境的分布處理過程中,使用基于連接的網(wǎng)絡(luò)通信模型。該通信模型首先在客戶機和服務(wù)器之間定義一套通信協(xié)議,并創(chuàng)建一個So

5、cket類,利用這個類來建立一條可靠的鏈接;然后,客戶端/服務(wù)器再在這條連接上可靠地傳輸數(shù)據(jù)??蛻舳税l(fā)出請求,服務(wù)器發(fā)出請求,服務(wù)器監(jiān)聽來自客戶機的請求,并為客戶端提供相應(yīng)服務(wù)??蛻?服務(wù)模式可靠性高、采用模塊化設(shè)計所以它的優(yōu)勢很明顯。是現(xiàn)代通信不可或缺的一部分。</p><p>  本課題主要是通過對簡單聊天程序的設(shè)計及QQ原理的分析,了解聊天程序的功能需求及工作原理;熟悉TCP/IP協(xié)議以及套節(jié)字編程原理;熟

6、悉Eclipse編程環(huán)境及Socket/ServerSocket編程方法。</p><p>  開發(fā)工具: Eclipse</p><p><b>  2 設(shè)計過程 </b></p><p>  聊天室的總體設(shè)計過程比較簡單主要是構(gòu)建設(shè)計框圖。就是當(dāng)客戶端發(fā)出信息時,我們將數(shù)據(jù)寫到socket,當(dāng)對方有數(shù)據(jù)到達時,我們從socket讀出來并顯示

7、給客戶。程序關(guān)鍵在于如何監(jiān)聽到有信息到達的過程。應(yīng)用程序流程圖如下圖所示,開始是先創(chuàng)建主窗口,然后初始化窗口,程序下面才開始消息循環(huán)處理。如果沒有消息循環(huán)的活,直接結(jié)束掉這個程序。如果有循環(huán)的話,要判斷這個窗口消息的內(nèi)容是哪種類型,然后再進行選擇處理方式。流程圖如圖2-1所示</p><p>  圖2-1 服務(wù)器模塊圖</p><p><b>  2.1服務(wù)器模塊</b&g

8、t;</p><p>  聊天室主要包括三個模塊,服務(wù)器模塊、客戶端模塊、信息處理模塊。該聊天室可以支持多人聊天,只支持文本信息。</p><p>  服務(wù)器模塊所包含的函數(shù)模塊如下圖所示</p><p>  圖2-2 服務(wù)器模塊圖</p><p><b>  2.2 客戶端模塊</b></p><p

9、>  客戶端所包含的函數(shù)模塊如下圖所示</p><p>  圖2-3 客戶端模塊圖</p><p>  2.3 信息處理模塊</p><p>  信息處理模塊包括注冊信息及登錄信息的處理模塊,其所包含的函數(shù)模塊如下圖所示</p><p>  圖2-4 信息處理模塊圖</p><p><b>  2.4

10、源代碼</b></p><p><b>  1.服務(wù)器程序清單</b></p><p>  // ChatService.java</p><p>  package lee;</p><p>  import java.util.*;</p><p>  import java.io

11、.*;</p><p>  public class ChatService </p><p><b>  {</b></p><p>  private static ChatService cs;</p><p>  private Properties userList;</p><p> 

12、 private LinkedList<String> chatMsg;</p><p>  private ChatService()</p><p><b>  {</b></p><p><b>  }</b></p><p>  public static ChatService

13、 instance()</p><p><b>  {</b></p><p>  if (cs == null)</p><p><b>  {</b></p><p>  cs = new ChatService();</p><p><b>  }</b

14、></p><p>  return cs;</p><p><b>  }</b></p><p>  public boolean validLogin(String user , String pass) </p><p>  throws IOException</p><p>&l

15、t;b>  {</b></p><p>  if (loadUser().getProperty(user) == null)</p><p><b>  {</b></p><p>  return false;</p><p><b>  }</b></p>&l

16、t;p>  if (loadUser().getProperty(user).equals(pass))</p><p><b>  {</b></p><p>  return true;</p><p><b>  }</b></p><p>  return false;</p&g

17、t;<p><b>  }</b></p><p>  public boolean addUser(String name , String pass)</p><p>  throws Exception</p><p><b>  {</b></p><p>  if (user

18、List == null)</p><p><b>  {</b></p><p>  userList = loadUser();</p><p><b>  }</b></p><p>  if (userList.containsKey(name))</p><p>&

19、lt;b>  {</b></p><p>  throw new Exception("用戶名已經(jīng)存在,請重新選擇用戶名");</p><p><b>  }</b></p><p>  userList.setProperty(name , pass);</p><p>  sav

20、eUserList();</p><p>  return true;</p><p><b>  }</b></p><p>  public String getMsg()</p><p><b>  {</b></p><p>  if (chatMsg == null

21、)</p><p><b>  {</b></p><p>  chatMsg = new LinkedList<String>();</p><p>  return "";</p><p><b>  }</b></p><p>  Str

22、ing result = "";</p><p>  for (String tmp : chatMsg)</p><p><b>  {</b></p><p>  result += tmp + "\n";</p><p><b>  }</b></

23、p><p>  return result;</p><p><b>  }</b></p><p>  public void addMsg(String user , String msg)</p><p><b>  {</b></p><p>  if (chatMsg

24、== null)</p><p><b>  {</b></p><p>  chatMsg = new LinkedList<String>();</p><p><b>  }</b></p><p>  if (chatMsg.size() > 40)</p>

25、<p><b>  {</b></p><p>  chatMsg.removeFirst();</p><p><b>  }</b></p><p>  chatMsg .add(user + "說:" + msg);</p><p><b>  }<

26、;/b></p><p>  // 下面是系統(tǒng)的工具方法</p><p>  private Properties loadUser()throws IOException</p><p><b>  {</b></p><p>  if (userList == null)</p>&

27、lt;p><b>  {</b></p><p>  File f = new File("userFile.properties");</p><p>  if (!f.exists())</p><p>  f.createNewFile() ; </p><p>  

28、userList = new Properties();</p><p>  userList.load(new FileInputStream(f)); </p><p><b>  }</b></p><p>  return userList;</p><p><b>  }</b></

29、p><p>  private boolean saveUserList()throws IOException</p><p><b>  {</b></p><p>  if (userList == null)</p><p><b>  {</b></p><p>  r

30、eturn false;</p><p><b>  }</b></p><p>  userList.store(new FileOutputStream("userFile.properties"), "userList");</p><p>  return true;</p><

31、;p><b>  }</b></p><p><b>  }</b></p><p><b>  2.客戶端程序清單</b></p><p>  //ChatServlet.java</p><p>  package lee;</p><p> 

32、 import java.io.IOException;</p><p>  import java.io.PrintWriter;</p><p>  import javax.servlet.ServletException;</p><p>  import javax.servlet.http.HttpServlet;</p><p>

33、;  import javax.servlet.http.HttpServletRequest;</p><p>  import javax.servlet.http.HttpServletResponse;</p><p>  import javax.servlet.ServletException;</p><p>  import javax.servle

34、t.ServletContext;</p><p>  import javax.servlet.RequestDispatcher;</p><p>  import javax.servlet.http.HttpServlet;</p><p>  import javax.servlet.http.HttpServletRequest;</p>

35、<p>  import javax.servlet.http.HttpServletResponse;</p><p>  import java.io.PrintWriter;</p><p>  import java.io.IOException;</p><p>  public class ChatServlet extends HttpSer

36、vlet {</p><p>  /* Constructor of the object.*/</p><p>  public ChatServlet() {</p><p><b>  super();</b></p><p><b>  }</b></p><p>

37、  /*Destruction of the servlet. <br> */</p><p>  public void destroy() </p><p><b>  {</b></p><p>  super.destroy(); // Just puts "destroy" string in log&

38、lt;/p><p>  // Put your code here</p><p><b>  }</b></p><p><b>  /*</b></p><p>  * The doGet method of the servlet. <br></p><p> 

39、 * This method is called when a form has its tag value method equals to get.</p><p>  * @param request the request send by the client to the server</p><p>  * @param response the response send b

40、y the server to the client</p><p>  * @throws ServletException if an error occurred</p><p>  * @throws IOException if an error occurred</p><p><b>  */</b></p><

41、;p>  public void doGet(HttpServletRequest request, HttpServletResponse response)</p><p>  throws ServletException, IOException {</p><p><b>  }</b></p><p><b>  /

42、*</b></p><p>  * The doPost method of the servlet. <br></p><p>  * This method is called when a form has its tag value method equals to post.</p><p>  * @param request t

43、he request send by the client to the server</p><p>  * @param response the response send by the server to the client</p><p>  * @throws ServletException if an error occurred</p><p>

44、  * @throws IOException if an error occurred</p><p><b>  */</b></p><p>  public void doPost(HttpServletRequest request, HttpServletResponse response)</p><p>  throws Ser

45、vletException, IOException {</p><p><b>  }</b></p><p><b>  /*</b></p><p>  * Initialization of the servlet. <br></p><p>  * @throws Servle

46、tException if an error occurs</p><p><b>  */</b></p><p>  public void init() throws ServletException </p><p><b>  {</b></p><p>  // Put your cod

47、e here</p><p><b>  }</b></p><p>  public void service(HttpServletRequest request,HttpServletResponse response)</p><p>  throws IOException,ServletException</p>&l

48、t;p><b>  {</b></p><p>  request.setCharacterEncoding("UTF-8");</p><p>  String msg = request.getParameter("chatMsg");</p><p>  if ( msg != null &a

49、mp;& !msg.equals(""))</p><p><b>  {</b></p><p>  String user = (String)request.getSession(true).getAttribute("user");</p><p>  ChatService.instan

50、ce().addMsg(user , msg);</p><p><b>  }</b></p><p><b>  //設(shè)置中文流</b></p><p>  response.setContentType("text/html;charset=GBK");</p><p> 

51、 PrintWriter out = response.getWriter();</p><p>  out.println(ChatService.instance().getMsg());</p><p><b>  }</b></p><p><b>  }</b></p><p><

52、b>  3 測試</b></p><p>  聊天室的程序模塊如下圖所示</p><p>  圖3-1 聊天室程序模塊圖</p><p>  程序運行后,用戶注冊界面如下圖所示</p><p>  圖3-2 用戶注冊界面</p><p>  用戶登錄界面如下圖所示</p><p&

53、gt;  圖3-3 用戶登錄界面</p><p>  進入聊天室的聊天界面如下圖所示</p><p>  圖3-4 聊天室界面</p><p>  可以進行多人聊天,多人聊天如下圖所示</p><p><b>  圖3-5 多人聊天</b></p><p><b>  總 結(jié)</

54、b></p><p>  網(wǎng)絡(luò)的課程設(shè)計,之前沒有接觸過網(wǎng)絡(luò)編程的語言,所以感覺難度比較大,也因為如此,在找資料及向老師同學(xué)的請教中學(xué)到了很多的東西。</p><p>  這次的課程設(shè)計是簡單聊天程序,在平日的生活學(xué)習(xí)中,可以說QQ等即時通訊軟件已占據(jù)重要的位置,也深受大家的喜愛,所以這個課程設(shè)計很有現(xiàn)實意義,做起來也比較感興趣。在具體做的過程中,參考了網(wǎng)絡(luò)班同學(xué)還有學(xué)長的一些程序,

55、雖然這個聊天室的界面及功能比較簡單,但從代碼的編寫及結(jié)果的調(diào)試成功還是花了很多的心思。尤其是剛開始用Eclipse軟件的時候,從完全陌生到慢慢的了解,這其中的過程對應(yīng)用方面知識的提高有很大的幫助。</p><p>  課程設(shè)計項目的雖然要求是獨立完成,但還是很多問題的解決離不開老師的指導(dǎo)及同學(xué)之間的探討,這些在做項目的時候都是必不可少的。學(xué)校提供了設(shè)計的機房還有老師的悉心指導(dǎo),這些跟課程設(shè)計的順利完成都是密不可分

56、的,在這里感謝大家?guī)淼膸椭?lt;/p><p>  另外就是知識方面的問題,計算機網(wǎng)絡(luò)和Java Socket有很多方面的知識還是很不熟悉,具體用到的時候就感覺生疏,或者還是缺乏設(shè)計方面的實踐。課程設(shè)計的機會不是很多,由于所學(xué)的知識包含了太多的方面,所以實踐方面還是遠遠不夠,希望在學(xué)校期間能夠多一些類似的機會。</p><p>  雖然課程設(shè)計順利的完成了,但由于水平有限,還是有很多的欠缺

57、跟不足之處,希望老師給予指正。</p><p><b>  參考文獻</b></p><p>  [1] 謝希仁. 計算機網(wǎng)絡(luò). 北京:電子工業(yè)出版社[M].2009</p><p>  [2] 丁振凡. Java語言實用教程. 北京:北京郵電大學(xué)出版社[M].2005</p><p>  [3] Y.Daniel Li

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論