




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Java網(wǎng)絡程序設計大作業(yè)分組報名表項目名稱簡易聊天應用程序的設計與實現(xiàn)項目功能網(wǎng)絡聊天室通常直稱聊天室,是一種人們可以在線交談的網(wǎng)絡論壇,在同一聊天室的人們通過廣播消息進行實時交談。運用java程序編寫聊天室,實現(xiàn)簡單的聊天功能。它是圖形界面,線程,流與文件系統(tǒng)等技術的綜合應用。程序實現(xiàn)了聊天室的基本功能,其中有:1.啟動服務器。2.啟動登陸界面。3.進入客戶端界面。4.發(fā)送信息。5.離開客戶端界面。6.關閉服務器。團隊成員姓名性別年級院、系、專業(yè)學號備注計算機科學與技術計算機科學與技術計算機科學與技術計算機科學與技術指導教師姓名研究方向軟件設計職稱團隊聯(lián)系方式聯(lián)系人姓名聯(lián)系電話郵件地址郵編
2、 目 錄一、團隊介紹及人員分工11.1 團隊介紹11.2 人員分工1二、作品概述12.1 創(chuàng)作背景12.2 功能概要12.3相關技術22.4 作品可行性分析3三、需求分析33.1 功能性需求33.2 非功能性需求6四、作品實現(xiàn)64.1服務端界面實現(xiàn)64.2客戶端界面實現(xiàn)84.3登錄實現(xiàn)94.4 聊天功能實現(xiàn)114.5 退出功能實現(xiàn)12五、作品設計、實現(xiàn)難點分析145.1 難點分析145.2 解決方案145.3 測試結果15一、團隊介紹及人員分工1.1 團隊介紹吳益帆:有良好的統(tǒng)籌能力和領導力,能合理安排各組員工作。張咪:踏實耐心,有良好的創(chuàng)新能力和策劃能力。沈丹丹:勤奮刻苦、有鉆研精神,對待編
3、程工作熱情細心,孜孜不倦。吳曉曉:對待工作細致專注,設計能力較強。團隊成員之間有較好的默契度及協(xié)作性。分工明確,各司其職,在共同的努力及相互的配合下,共同解決程序中出現(xiàn)的困難并盡可能的優(yōu)化程序,最終完成整個項目。1.2 人員分工吳益帆:負責程序最后的整理,完成部分功能及錯誤的處理。張咪:負責程序的編碼部分及項目具體功能的實現(xiàn)。沈丹丹:負責程序的界面部分,為改程序搜索解決的方案。吳曉曉:負責程序的策劃部分,項目的可行性分析及文檔的編寫工作。二、作品概述2.1 創(chuàng)作背景網(wǎng)絡聊天室通常直稱聊天室,是一種人們可以在線交談的網(wǎng)絡論壇,在同一聊天室的人們通過廣播消息進行實時交談。在當今信息時代,越來越多的
4、聊天工具被應用,java語言是當今流行的網(wǎng)絡編程語言,它具有面向對象,與平臺無關,安全,多線程等特點。使用java語言不僅可以實現(xiàn)大型企業(yè)級的分布式應用系統(tǒng),還能夠為小型的的,嵌入式設備進行應用程序的開發(fā)。面向對象的開發(fā)是當今世界最流行的開發(fā)方法,它不僅具有更貼近自然地語義,而且有利于軟件的維護和繼承,鍛煉我們熟練地應用面向對象的思想和設計方法解決實際問題的能力。2.2 功能概要運用java程序編寫聊天室,實現(xiàn)簡單的聊天功能。它是圖形界面,線程,流與文件系統(tǒng)等技術的綜合應用。其界面主要采用了java.awt包,java.swing包等。程序實現(xiàn)了聊天室的基本功能,其中有:(1) 服務器端功能描
5、述:啟動服務器端:點擊“開啟”按鈕,啟動服務;端口服務:輸入服務器的某個端口號,開啟服務器的這個端口;顯示在線用戶信息:在右邊的用戶列表顯示所有在線的用戶信息;顯示用戶聊天信息:在左邊的聊天信息區(qū)域內顯示所有用戶所發(fā)的信息;服務端關閉:點擊“關閉按鈕,關閉服務。(2) 客戶端功能描述:啟動客戶端:運行客戶端程序,啟動客戶端;選擇服務器端口號:輸入想要連接的服務器的端口號;用戶登錄:填入用戶名,點擊“登錄”按鈕,連接相應服務器;顯示在線用戶:在右邊的用戶列表中可以看到當前在線的用戶;發(fā)送/接受聊天消息:在下面的文本輸入?yún)^(qū)域輸入要發(fā)送的內容,點擊發(fā)送可以在左邊的聊天信息區(qū)域內顯示自己以及其他用戶所
6、發(fā)的信息;用戶離線:點擊“離線”按鈕,與服務器斷開連接;客戶端關閉:關閉客戶端圖形用戶界面,關閉客戶端。2.3相關技術(1) Java概述JAVA語言有下面一些特點:簡單、面向對象、分布式、解釋執(zhí)行、魯棒、 安全、體系結構中立、可移植、高性能、多線程以及動態(tài)性。豐富的類庫JAVA提供了大量的類以滿足網(wǎng)絡化、多線程、面向對象系統(tǒng)的需要。語言包提供的支持包括字符串處理、多線程處理、數(shù)學函數(shù)處理等,可以用它簡單地實現(xiàn)JAVA程序的運行平臺。實用程序包提供的支持包括哈希表、堆棧、可變數(shù)組、時間和日期等。輸入輸出包用統(tǒng)一的"流"模型來實現(xiàn)所有格式的I/O,包括文件系統(tǒng)、網(wǎng)絡、輸入低級
7、網(wǎng)絡包用于實現(xiàn)Socket編程。抽象圖形用戶接口包實現(xiàn)了不同平臺的計算機的圖形用戶接口部件, 包括窗口、菜單、滾動條、對話框等,使得JAVA可以移植到不同平臺的機器。網(wǎng)絡包支持Internet的TCP/IP協(xié)議,提供了與Internet的接口。它支持URL連接,WWW的即時訪問,并且簡化了用戶/服務器模型的程序設計。(2) 套接字Socket,簡稱套接字,用于實現(xiàn)網(wǎng)絡上客戶和服務器之間的連接。也就是說網(wǎng)絡上兩個或兩個以上雙工方式通信的進程之間總有一個連接,這個連接的端點成為套接字,套接字是在比較低的層次上通信的。具體的說:一個服務器應用程序一般偵聽一個特定的端口等待客戶端的連接請求,當一個連接
8、請求到達時,客戶端和服武器端建立一個通信連接,在連接過程中,客戶端被分配一個本地端口與一個Socket建立連接,客戶端通過寫Socket來通知服務器,以讀Socket中的信息,類似的服務器也獲得一個本地端口,它需要一個新的端口號來偵聽原始端口上的其他連接請求。服務器也通過它的本地端口連接一個Socket,通過讀寫和客戶端通信。Socket程序的工作過程:1.建立Socket連接:在通信開始之前由通信雙方確認身份,建立一條專用的虛擬連接道。2.數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進行通信。3.關閉:通信結束時,再將所建的虛擬連接拆除。2.4 作品可行性分析由于本軟件知識一個聊天程序,程序只提供
9、用戶之間的聊天功能,故對網(wǎng)絡傳輸數(shù)據(jù)要求不是很高,只要正常的傳輸速度就可以了。三、需求分析3.1 功能性需求本聊天室分為聊天室服務端和聊天室客戶端,服務端與客戶端之間通過套接字Socket(TCP)連接。在java中使用套接字相當簡單,Java API為處理套接口的通信提供了一個類.Socket.,使得編寫網(wǎng)絡應用程序相對容易服務器采用多線程以滿足多用戶的請求,并通過創(chuàng)建一個ServerSocket對象來監(jiān)聽來自客戶的連接請求,默認IP地址為:localhost默認端口為8888。(1) 聊天室服務端模塊,包括端口服務、啟動服務、關閉服務、顯示在線用戶、顯示用戶聊天信息,如圖3.1所示;圖3.
10、1聊天室服務端模塊圖端口服務:輸入要偵聽的端口,默認為8888;啟動服務:啟動服務器,并開始在設置的端口中偵聽,客戶端用戶可以登錄并開始聊天;關閉服務:關閉服務器,偵聽結束??蛻舳擞脩舨荒茉倭奶?;顯示在線用戶:服務器列表顯示在線用戶數(shù)和所有在線用戶名稱;顯示用戶聊天信息:在文本區(qū)中顯示所有用戶聊天信息和登錄、退出信息。(2) 聊天室客戶端模塊,包括用戶登錄、用戶離線、連接設置、發(fā)送和接收聊天信息、顯示在線用戶、退出,如圖3.2所示:圖3.2聊天室客戶端模塊圖用戶登錄:只能在聊天室服務端已開啟的情況下,用戶點擊“按鈕”才能登錄,用戶登錄之后才能開始聊天,登錄后不能再修改用戶設置和連接設置;用戶離
11、線:用戶點擊“離線”按鈕,退出聊天,與服務器斷開連接;連接設置:用戶可以設置自己連接的服務器的IP地址和端口號,默認的連接地址為:localhost:8888;發(fā)送和接收聊天信息:用戶可以給所有人發(fā)送信息,并能看到其他用戶發(fā)送給所有人的消息;顯示在線用戶:服務器列表顯示在線用戶數(shù)和所有在線用戶名稱;退出:關閉所有聊天并退出客戶端。(3) 程序流程:首先啟動服務器,用戶打開客戶端,輸入服務器端口號,再輸入用戶名就可以登錄,登錄以后會顯示當前在線的用戶信息,用戶可以看到其他用戶所發(fā)的信息,自己也可以發(fā)送信息。用戶點擊離線就會與服務器斷開連接,最后關閉服務器,如圖3.3所示:圖3.3程序流程圖3.2
12、 非功能性需求(1) 安全需求本程序能防衛(wèi)禁止未登錄用戶進行通信,防止數(shù)據(jù)丟失,需要輸入用戶名、端口號連接相應的服務器才允許用戶間的通信。(2) 性能需求本程序使用的對象是所有運行該程序的用戶,用戶在連接服務器可以進行客戶端之間的通信。(3) 易用性需求本程序的使用對象計算機水平一般,有一定的易用性上的要求,程序應當存在著一些友好性的提示,提高程序的友好度。(4) 可維護性需求本程序能夠及時發(fā)現(xiàn)并糾正系統(tǒng)故障,對系統(tǒng)數(shù)據(jù)進行備份,有系統(tǒng)還原功能。(5) 健壯性需求本程序在遭遇非法輸入數(shù)據(jù),能夠排除該數(shù)據(jù)并繼續(xù)運行;對于系統(tǒng)異常有完備的預警預防處理機制。四、作品實現(xiàn)4.1服務端界面實現(xiàn)在服務端啟
13、動后,要顯示“簡易聊天室服務器”的圖形用戶界面,如圖6.1所示:圖6.1 服務端圖形用戶界面 “簡易聊天室服務器”的圖形用戶界面實現(xiàn)的主要代碼如下:private Label svrIP = new Label("服務器IP:");private TextField showSvrIP = new TextField();private Label svrPort = new Label("服務器端口:");private TextField getSvrPort = new TextField("8888");private But
14、ton enter = new Button("啟動");private TextArea output = new TextArea();private Label user = new Label("當前在線用戶(0)");private List list = new List();private void setup() Panel top = new Panel();top.setLayout(new FlowLayout();top.add(svrIP);svrIP.setBackground(bg);top.add(showSvrIP);s
15、howSvrIP.setBackground(bg);top.add(svrPort);svrPort.setBackground(bg);top.add(getSvrPort);getSvrPort.setBackground(bg);top.add(enter);enter.setBackground(bg);Panel east = new Panel();east.setLayout(new BorderLayout();east.add("North", user);user.setBackground(bg);east.add("Center"
16、;, list);list.setBackground(bg);setLayout(new BorderLayout();add("North", top);top.setBackground(bg);add("East", east);east.setBackground(bg);add("Center", output);output.setBackground(bg);setBackground(bg);點擊“啟動”按鈕,開啟默認的服務器8888端口,如圖6.2所示:圖6.2 服務端端口開啟8888端口開啟實現(xiàn)代碼如下:try
17、server = new ServerSocket(Integer.parseInt(getSvrPort.getText();rightNow = Calendar.getInstance().getTime().toLocaleString();output.append(rightNow + "n開啟服務器.nn");enter.setLabel("關閉");ht = new Hashtable();ht_s = new Hashtable();st = new ServerThread();serving = true; catch (IOExc
18、eption ioe) output.append("Error: " + ioe + "nn");4.2客戶端界面實現(xiàn) 在客戶端啟動后,顯示“簡易聊天室客戶端”的圖形用戶界面,如圖6.3所示:圖6.3 客戶端圖形用戶界面“簡易聊天室客戶端”的圖形用戶界面實現(xiàn)的主要代碼如下:private Button B_login = new Button("登陸");private Button B_logout = new Button("離線");private Button B_send = new Button(&q
19、uot;發(fā)送");private Label userName = new Label("您的用戶名:");private TextField getUserName = new TextField(); / 獲取用戶名private Label svrIP = new Label("當前服務器IP:");private TextField getSvrIP = new TextField(); / 獲取服務器 IP 地址private Label svrPort = new Label("當前服務器端口:");privat
20、e TextField getSvrPort = new TextField(); / 獲取服務器端口private TextArea input = new TextArea(); / 輸入文本框private TextArea output = new TextArea(); / 輸出文本框private Label user = new Label("當前在線用戶(0)");private List list = new List();private void setup() Panel top1 = new Panel();top1.setLayout(new Bo
21、rderLayout();top1.add("West", userName);userName.setBackground(bg);top1.add("Center", getUserName);getUserName.setBackground(bg);Panel top2 = new Panel();top2.setLayout(new BorderLayout();top2.add("West", svrIP);svrIP.setBackground(bg);top2.add("Center", getSv
22、rIP);getSvrIP.setBackground(bg);Panel top3 = new Panel();top3.setLayout(new BorderLayout();top3.add("West", svrPort);svrPort.setBackground(bg);top3.add("Center", getSvrPort);getSvrPort.setBackground(bg);Panel top4 = new Panel();top4.setLayout(new BorderLayout();top4.add("Nor
23、th", top1);top4.add("Center", top2);top4.add("East", top3);Panel east = new Panel();east.setLayout(new BorderLayout();east.add("North", user);user.setBackground(bg);east.add("Center", list);list.setBackground(bg);Panel center = new Panel();center.setLayou
24、t(new BorderLayout();center.add("Center", output);output.setBackground(bg);center.add("South", input);input.setBackground(bg);center.add("East", east);east.setBackground(bg);Panel south = new Panel();south.setLayout(new FlowLayout();south.add(B_login);B_login.setBackgro
25、und(bg);south.add(B_send);B_send.setBackground(bg);south.add(B_logout);B_logout.setBackground(bg);setLayout(new BorderLayout();add("North", top4);add("Center", center);add("South", south);setBackground(bg);4.3登錄實現(xiàn)在客戶端輸入用戶名,點擊“登陸”,客戶端顯示系統(tǒng)時間和“您已成功登陸”( 如圖6.4所示),并將用戶名發(fā)送給服務端
26、。服務端接收來自客戶端的數(shù)據(jù),顯示“sdd登陸”以及將用戶名顯示在用戶列表中(如圖6.5所示),并將用戶數(shù)據(jù)發(fā)送給所有在線的客戶端。圖6.4 用戶登錄用戶登錄代碼實現(xiàn)如下:if (login) return;boolean accepted = false, refused = false;String line = new String("");try connection = new Socket(getSvrIP.getText(),Integer.parseInt(getSvrPort.getText();in = new DataInputStream(conne
27、ction.getInputStream();out = new DataOutputStream(connection.getOutputStream();out.writeUTF("L " + getUserName.getText();while (!accepted && !refused) line = in.readUTF();if (line.charAt(0) = 'R') refused = true; if (line.charAt(0) = 'A') accepted = true; if (refuse
28、d) rightNow = Calendar.getInstance().getTime().toLocaleString();output.append(rightNow + "n登錄失敗請使用合法用戶名.nn");if (accepted) rightNow = Calendar.getInstance().getTime().toLocaleString();output.append(rightNow + "n您已成功登陸.nn");login = true;圖6.5 服務端顯示用戶服務端向在線用戶發(fā)送當前在線用戶列表代碼實現(xiàn)如下:login =
29、 true;list.add(userName);user.setText("User (" + list.getItemCount() + ")");String str = list.getItems();line = "A " / acceptedfor (int i = 0; i < str.length; i+) line += (stri + " "); out.writeUTF(line);line = "L " + userName;rightNow = Calendar.
30、getInstance().getTime().toLocaleString();output.append(rightNow + "n" + userName + " 登陸.nn");客戶端獲取當前在線用戶列表代碼實現(xiàn)如下:String str = line.split(" ");for (int i = 1; i < str.length; i+) list.add(stri);user.setText("當前在線用戶(" + list.getItemCount() + ")");4.4 聊天功能實現(xiàn)開啟多個客戶端,并登錄。在輸入框中輸入信息,點擊“發(fā)送”,數(shù)據(jù)傳送至服務端(如圖6.6所示),再由服務端數(shù)據(jù)發(fā)送給其他客戶端。每個客戶端都接收服務端發(fā)送過來的數(shù)據(jù),并顯示在消息框中,如圖6.7所示。圖6.6 服務端顯示消息用戶發(fā)送消息代碼實現(xiàn)如下:private void sendMsg() if (!login)return;try if (input.getText().e
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 買賣合同擔保人協(xié)議書
- 逾期仲裁調節(jié)協(xié)議書
- 裝修合同毀約協(xié)議書
- 餐飲招收學員協(xié)議書
- 音樂機構合伙協(xié)議書
- 高考志愿招生協(xié)議書
- 魚塘投股合同協(xié)議書
- 食堂勞務外包協(xié)議書
- 食品轉讓合同協(xié)議書
- 賭博自愿離婚協(xié)議書
- 配電箱系統(tǒng)圖
- 精選靜電感應現(xiàn)象的應用練習題(有答案)
- 電纜井工程量計算
- 初中音樂--人聲的分類--(1)pptppt課件
- 育種學 第6章雜交育種
- 小作坊生產工藝流程圖(共2頁)
- 生態(tài)瓶記錄單
- 食品飲料購銷合同
- 民法典部分條文新舊對比解讀PPT課件
- 鋼芯鋁絞線參數(shù)
- 音王點歌機800S加歌操作方法
評論
0/150
提交評論