版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、' ' '編號:箴標林電孑科被人彎力夕GUILINUNIVERSITYOFELECTRONICTECHNOLOGY數學與計算科學學院創(chuàng)新性實驗結題報告書實驗題目:實驗成績(教師填寫):學院:數學與計算科學學院專業(yè):學生姓名:小組成員:指導教師:2011年04月15日' ' ' '' ' '一、實驗目的及主要創(chuàng)新性點:目的:本次實驗目的在于通過實踐加深我們對面向對象程序設計的理論、方法和基礎知識的理解,掌握使用Java語言進行面向對象設計的基本方法,提高運用面向對象知識分析實際問題、解決實際問題的能力。創(chuàng)新點:該實驗
2、程序實現局域網內的聊天功能,通過服務器端的消息轉發(fā),不僅實現了多用戶之間的群聊,還可以和單個用戶之間的私聊,完整了一個簡單的網絡聊天軟件的功能。包括服務器端程序和客戶端程序兩部分??蛻舳顺绦颍嚎蛇B接到服務器,并將消息發(fā)送到服務器端和接受服務器端發(fā)送來的信息。服務器端程序:可將消息發(fā)送到客戶端和接受客戶端發(fā)送來的信息二、實驗要求:課程設計可選用NetBeans、Eclipse、JBuilder等作為開發(fā)平臺以提高開發(fā)效率,盡可能熟練掌握其中一種集成開發(fā)環(huán)境。通過這次設計,要求掌握以下內容:1)面向對象技術中的繼承與多態(tài)(重載和覆蓋)機制、各種修飾符的使用2)類、包、接口的定義與使用3)常用工具類
3、與算法的實現(數組、向量、字符串、鏈表)4) Java常用標準GUI組件及其事件處理5) Java的異常處理機制6) Java的數據庫連接技術7) Java的多線程技術與動畫制作8) Java的網絡編程三、實驗原理:本程序設計為兩個部分:服務器(ChatRoomServer)和客戶端(ChatRoom)聊天的關鍵在于要將客戶端發(fā)送過來的消息分發(fā)給其他客戶端,為了解決這個問題,在服務器程序中建立一個套接口鏈表,用來保存所有與客戶端建立了連接的服務端口。下面描述了聊天的實現原理:當客戶端ClientN向對應的服務端口N發(fā)送了消息Message,服務端口N將Message復制給所有套接口列表(USE
4、RLIST)中的套接口緩沖區(qū),然后向每個服務端口發(fā)送WRITE消息,使服務端口將Message發(fā)送給對應的客戶端。這樣,客戶端就都獲得了Message消息,實現了聊天功能。以下程序是多人聊功能的實現''''BOOLCClientSocketList:Sends(char*buff,intn)CClientSocket*curr=Head;while(curr)curr->Send(buff,n);curr=curr->Next;returntrue;USERLIST表時多人聊天程序的核心,它是一個動態(tài)變化的鏈表,為空表示沒有客戶端建立了連接,不為空時
5、每個元素就代表有一個客戶端與服務器建立了連接。以下程序是私聊功能的實現:BOOLCClientSocketList:OnlySend(char*buff,intn,intwho)CClientSocket*curr=Head;while(curr&&who>0)curr=curr->Next;who-;curr->Send(buff,n);returntrue;四、實驗內容與步驟:1 系統(tǒng)分析1.1 可行性分析經濟可行性:由于本系統(tǒng)的主要背景是畢業(yè)課程設計,不注重直接的經濟效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對自身的經濟要求也不高,只要有一臺能
6、運行Java軟件的電腦便可,所以不用考慮到經濟問題。技術可行性:本系統(tǒng)的開發(fā)利用MicrosoftSQLServer2000作為本系統(tǒng)的數據庫,它是一個支持多用戶的新型數據庫,適用于大中規(guī)模的數據量需求。學校校園網的建設也為新系統(tǒng)服務器/客戶端的結構提供了硬件的支持。使用Java作為系統(tǒng)開發(fā)的開發(fā)環(huán)境,它提供完善的指令控制語句、類與對象的支持及豐富的數據類型,給開發(fā)高性能系統(tǒng)提供的保障為開發(fā)滿足客戶要求的系統(tǒng),保證了代碼的模塊化要求,而代碼模塊化的提高,非常有利于以后對新系統(tǒng)的擴展與修改。運行可行性:本系統(tǒng)為一個小型的局域網聊天系統(tǒng),所耗費的資源非常的小,現在一般的電腦無論是硬件還是軟件都能夠
7、滿足條件,因此,本系統(tǒng)在運行上是可行的。綜上所述,本系統(tǒng)的設計與開發(fā)在技術上和硬件設備上的條件都是滿足的,因此,它在技術上是可行的。''''1.2 需求分析1.21 基本功能需求新用戶注冊:一般用戶都想知道其他用戶的一些基本資料,比如姓名、年齡、地址、IP地址等一些信息。查找以及添加好友:用戶為了實現和其他人聊天,必須查找哪些人在線或者查找有哪些人使用該聊天工具.通過查找到的用戶號碼來實現添加其為好友。文字聊天:本聊天工具其實現的目的就是為了實現和用戶間的溝通和交流,所以說文字聊天是必須具備的一項基本功能。用戶個性化資料:用戶申請的號碼應該可以實現用戶根據自己的
8、喜好選擇自己喜歡的圖象、自我介紹。查看聊天記錄:用戶在聊天的時候,難免會遇到把聊天窗口關掉,這樣用戶間的聊大信息也就看不到了,這樣有可能導致用戶不記得和其他用戶聊的內容,導致這種結果對用戶的聊天帶來很大的不便,所以應該實現聊天信息的記錄保存和查找。用戶管理:用戶有時候要修改和查看自己的用戶資料,這樣本系統(tǒng)應該實現用戶資料的查詢和修改這基本功能。1.22 環(huán)境需求支持WIN95/98/NT/2000/XP操作系統(tǒng)C200,32M內存以上可以正常運行其他無特殊要求1.23 性能需求盡量減少服務器的開銷及數據傳送負擔,提高數據利用效率和數據傳送效率,避免無效數據的傳輸。1.24 界面需求界面友好,聊
9、天對話框線程支持,實現無限制數量用戶聊天。服務器端無特殊要求1.25 用戶需求現在社會是信息化的社會,什么都追求著快、新、好。在這種快節(jié)奏的生活方式中,人們之間的通訊聯系就顯得非常的重要了。商業(yè)之間的合作,人們之間的友誼交往,甚至熱門談到的網上戀愛等等都需要通訊聯系。而過去的鴻雁傳書已經是滿足不了現代人的欲望了。既然這網絡這么的流行,過去的聯系方式又這么的落后,因此人們的目光就轉向了網絡通訊。聊天工具就是一種網上很普遍但是又很重要的通訊方式。''''2,總體設計2.1功能模塊圖局域網聊天工具服務器端2.2系統(tǒng)業(yè)務流程圖、' ' ''
10、; ' ' '3,系統(tǒng)模塊詳細設計3.1文本聊天模塊流程圖開始工展*況l+Jr1-IA.i-Jk.liE:?也=中口IFiL.-p-F二h-r-壬HC_*廣!_>3.2文件傳輸模塊流程圖執(zhí)行監(jiān)聽線程間接收就發(fā)送文件傳他請孝支送把空信不按妝發(fā)送站的文件傳入清家接欣端同茸捺股文向超排飲文將9啟動計時器,發(fā)送文件漆,反序狀態(tài)友遂同意接快信號,啟動計時器,接u女文件泳,度微狀態(tài)添加待恃送的文件捋遠程文件存 儲至本地文件隨本地文件發(fā)送至接收她關閉計時器.關閉文件流關閉廿時毒,關閉文件造用戶密碼線止4,詳細設計及實現4.1頁面設計4.1.1登陸框界面設計歡迎所有本聊天工具一登
11、陸用戶登陸用戶注冊4.1.2聊天界面的設計與1000054的聊天好友網名好友圖像好友號碼好友IP地址聊天的信息要發(fā)給對方的信息發(fā)送信息充填信息4.1.3主界面的設用1QQM象我的QQt碼我的好友陌生人黑名單查找好友我的資料我的狀態(tài)4.1 .4注冊框的設計用戶得注冊用戶名用戶密碼密碼確認用戶頭像用戶性別用戶地址用戶EMAIL確認提交重新填寫4.2 數據輸入輸出設計4.3 .1數據輸入4.2.11登陸界面數據的輸入要求Number(賬號)輸入的必須是整型,它是一個用戶登陸的賬號。Password微碼)可以是你設置好的字符串,字符串內容可以隨便。如果用戶設置不正確,將會導致登陸不成功,系統(tǒng)會彈出相應
12、的對話框。4.2.12注冊界面的輸入Nickname(昵稱),password脩碼),sign(個性簽名)可以是任意的字符串。Email必須是Email地址格式,也就是中間必須含有”,否則提示輸入不正確。4.3.12服務器端監(jiān)聽線程的設計服務器在監(jiān)聽到一個客戶以后,它就會創(chuàng)建一個線程去管理這個客戶。至于如何去管理這個客戶,服務器端不做任何干涉,完全由監(jiān)聽線程決定。監(jiān)聽線程主要對客戶端的請求進行響應,做到有求必應。接收到信息后,首先判斷該信息是哪種類型,如果是要訪問數據庫服務器,則直接根據發(fā)送信息內容操作數據庫。如果是聊天內容,服務器會將該信息再次轉發(fā)到目的地。這些判斷將會全放部在一個線程的ru
13、n方法中。4.3代碼實現4.3.1 注冊功能的部分代碼如下:' ' 'trySocketsocket=newSocket("localhost",8000);BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream();PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream(),true);out.println("
14、login");out.println(PNTextField.getText().trim();out.println(PW.getPassword();Stringstr=""str=in.readLine().trim();/從服務器讀取消息in.close();out.close();socket.close();/如果失敗就告訴出錯if(str.equals("false")JOptionPane.showMessageDialog(this,"對不起,出錯了:-(","ok",JOptionP
15、ane.INFORMATION_MESSAGE);else/如果成功就打開主程序intqno=Integer.parseInt(PNTextField.getText().trim();this.dispose();MainFramemainframe=newMainFrame(qno,"localhost",8000);mainframe.setSize(600,250);DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();intscreenWidth=screenSize.width;intsc
16、reenHeight=screenSize.height;DimensionframeSize=mainframe.getSize();intx=screenWidth-frameSize.width;inty=0;mainframe.setLocation(x,y);mainframe.setResizable(true);mainframe.setVisible(true);catch(IOExceptionex)4.3.2 登陸功能的部分代碼如下:trySocketsocket=newSocket("localhost",8000);BufferedReaderin=
17、newBufferedReader(newInputStreamReader(socket.getInputStream();PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream(),true);out.println("new");發(fā)送新建用戶請求out.println(this.petname.getText().trim();out.println(this.password.getText().trim();out.println(th
18、.getText().trim();Stringsex=""if(male.isSelected()sex+="男";elsesex+="女";out.println(sex);System.out.println(sex);out.println(this.email.getText().trim();out.println(headpic.getSelectedIndex();intno;no=Integer.parseInt(in.readLine().toString().trim();System.out.pr
19、intln(no);Stringstr1=""str1=in.readLine().trim();/從服務器讀取信息/如果出錯if(str1.equals("false")JOptionPane.showMessageDialog(this,"對不起,出錯了:-(","ok",JOptionPane.INFORMATION_MESSAGE);else如果成功就告訴用戶其號碼JOptionPane.showMessageDialog(this,"yourMnumis"+no,"ok&qu
20、ot;,JOptionPane.INFORMATION_MESSAGE);this.dispose();/并打開主窗口MainFramemainframe=newMainFrame(no,"localhost",8000);mainframe.setResizable(true);mainframe.setVisible(true);mainframe.show();out.close();in.close();socket.close();catch(IOExceptionex)System.err.println(ex);4.3.3查詢好友功能的部分代碼如下if(jCh
21、eckBox2.isSelected()FindResultfs=newFindResult();fs.setSize(400,200);DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();' ' ' ''''intscreenWidth=screenSize.width;intscreenHeight=screenSize.height;DimensionframeSize=fs.getSize();intx=(screenWidth-frameSize.wid
22、th)/2;inty=(screenHeight-frameSize.height)/2;fs.setLocation(x,y);fs.setResizable(false);fs.setVisible(true);this.dispose();else/用號碼查找,并添加其為好友intwant_find_no=Integer.parseInt(this.jTextField1.getText().toString().trim();trySocketsocket=newSocket("localhost",8000);BufferedReaderin=newBuffere
23、dReader(newInputStreamReader(socket.getInputStream();PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream(),true);System.out.println("isOn");out.println("isOn");out.println(want_find_no);/對方在線就發(fā)送添加好友信息,對方確認后,系統(tǒng)添加/對發(fā)不在線就留言等待,等對方確認后,系統(tǒng)添加intis
24、On=Integer.parseInt(in.readLine().toString().trim();if(isOn=1)/在線Stringwant_find_IP=in.readLine().toString().trim();/添加好友,等待對方確認System.out.println(want_find_IP);AddFriendBoxadd=newAddFriendBox(want_find_no,my_no,want_find_IP);add.setSize(400,400);DimensionscreenSize=Toolkit.getDefaultToolkit().getSc
25、reenSize();intscreenWidth=screenSize.width;intscreenHeight=screenSize.height;DimensionframeSize=add.getSize();intx=(screenWidth-frameSize.width)/2;inty=(screenHeight-frameSize.height)/2;add.setLocation(x,y);add.setResizable(false);add.setVisible(true);else/不在線,留言' ' ' '' '
26、39;out.close();in.close();socket.close();catch(IOExceptione12)System.err.println(e12);this.dispose();5.3.4客戶端的主要代碼:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;.*;importjava.io.*;publicclassNewextendsJFrame/登錄窗口類JPanelcontentPane;11m*Stringserver;/服務器名intserport;/端口privateSocketsocket
27、;privateBufferedReaderin;/輸入輸出流privatePrintWriterout;程序界面當點擊登陸按紐時代碼的實現voidlogin_mouseClicked(MouseEvente)/登錄按扭trySocketsocket=newSocket(InetAddress.getByName(server),serport);/連接服務器BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream();PrintWriterout=newPrintWriter(newBuffer
28、edWriter(newOutputStreamWriter(socket.getOutputStream(),true);out.println("login");/告訴服務器我要登錄out.println(jicq.getText();out.println(password.getPassword();Stringstr=""/dostr=in.readLine().trim();/從服務器讀取消息/如果失敗就告訴出錯if(str.equals("false")JOptionPane.showMessageDialog(this
29、,"對不起,出錯了:-(","ok",JOptionPane.INFORMATION_MESSAGE);else/如果成功就打開主程序this.dispose();intg=Integer.parseInt(jicq.getText();MainWinf2=newMainWin(g,server,serport);f2.setVisible(true);''''' ' '/System.out.println("n");/while(!str.equals("ok");catch(IOExceptione1)voidnewuser_mouseClicked(MouseEvente)/新建用戶按紐this.dispose();JDialogd=n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 老年病科科普講解大賽
- 塑料廠施工合同填寫樣本
- 商場通風系統(tǒng)改造及安裝協(xié)議
- 生態(tài)保護晉升管理策略
- 購物中心倒水泥板施工合同
- 生態(tài)園區(qū)小青瓦安裝協(xié)議
- 水果店營業(yè)員招聘合同
- 世界文化遺產博物館管理辦法
- 藥店營銷專員勞動合同
- 醫(yī)院病房樓租賃與承包合同條款
- 福建省漳州市十校聯盟2024-2025學年高一上學期11月期中考試 數學 含解析
- 幼兒園老師說課培訓課件
- 房貸延期代理合同(2篇)
- 2023年曲靖市中醫(yī)醫(yī)院招聘考試真題
- 海洋研學勞動課程設計
- 林業(yè)基礎知識考試題庫單選題100道及答案解析
- 2024年盤錦北方瀝青股份限公司招聘18人高頻難、易錯點500題模擬試題附帶答案詳解
- 電氣工程及其自動化職業(yè)規(guī)劃課件
- 《短視頻拍攝與制作》課件-3短視頻拍攝的三大技巧
- (高清版)DZT 0399-2022 礦山資源儲量管理規(guī)范
- 【川教版】《生命 生態(tài) 安全》四上第11課《預防流感》課件
評論
0/150
提交評論