版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 多人聊天系統(tǒng)的設(shè)計與實現(xiàn)課程設(shè)計說明書
- 網(wǎng)絡(luò)多人聊天系統(tǒng)的設(shè)計與實現(xiàn)【任務(wù)書】
- 課程設(shè)計說明書
- 課程設(shè)計說明書
- 網(wǎng)絡(luò)課程設(shè)計---簡單聊天系統(tǒng)的設(shè)計與實現(xiàn)
- vfp課程設(shè)計--學(xué)生管理系統(tǒng)課程設(shè)計說明書
- 網(wǎng)絡(luò)多人聊天系統(tǒng)的設(shè)計與實現(xiàn)【開題報告】
- 步進驅(qū)動系統(tǒng)設(shè)計課程設(shè)計說明書
- 液壓課程設(shè)計設(shè)計說明書
- 夾具設(shè)計課程設(shè)計說明書
- 設(shè)計表達課程設(shè)計說明書
- 工廠管理系統(tǒng)課程設(shè)計說明書
- 學(xué)生管理系統(tǒng)課程設(shè)計說明書
- 醫(yī)院管理系統(tǒng)課程設(shè)計說明書
- 網(wǎng)絡(luò)協(xié)議課程設(shè)計基于udp的多人聊天系統(tǒng)源代碼
- 前門課程設(shè)計說明書
- javaweb課程設(shè)計說明書
- 后蓋課程設(shè)計說明書
- 鍋爐課程設(shè)計說明書
- 空調(diào)課程設(shè)計說明書
評論
0/150
提交評論