freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于java的聊天室程序設(shè)計(jì)(編輯修改稿)

2025-06-12 21:03 本頁面
 

【文章內(nèi)容簡介】 Client/Server 或客戶 /服務(wù)器模式 : Client 和 Server 常常分別處在相距很遠(yuǎn)的兩臺(tái)計(jì)算機(jī)上, Client 程序的任務(wù)是將用戶的要求提交給 Server 程序,再將 Server程序返回的結(jié)果以特定的形式顯示給用戶; Server 程序的任務(wù)是接收客戶程序提出的服務(wù)請(qǐng)求,進(jìn)行相應(yīng)的處理,再將結(jié)果返回給客戶程序。 一、 C/S 工作模式 C/S 結(jié)構(gòu)的基本原則是將計(jì)算機(jī)應(yīng)用任務(wù)分解成多個(gè)子任務(wù),由多臺(tái)計(jì)算機(jī)分工完成,即采用 “功能分布 ”原則??蛻舳送瓿蓴?shù)據(jù)處理,數(shù)據(jù)表示以及用戶接口功能;服務(wù)器 端完成 DBMS 的核心功能。這種客戶請(qǐng)求服務(wù)、服務(wù)器提供服務(wù)的處理方式是一種新型的計(jì)算機(jī)應(yīng)用模式。 二、 C/S 結(jié)構(gòu)的優(yōu)點(diǎn) C/S 結(jié)構(gòu)的優(yōu)點(diǎn)是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對(duì)應(yīng)的優(yōu)點(diǎn)就是客戶端響應(yīng)速度快。缺點(diǎn)主要有以下幾個(gè): 只適用于局域網(wǎng)。而隨著互聯(lián)網(wǎng)的飛速發(fā)展, 移動(dòng)辦公 和分布式辦公越來越普及,這需要我們的系統(tǒng)具有擴(kuò)展性。這種方式遠(yuǎn)程 訪問需要專門的技術(shù),同時(shí)要對(duì)系統(tǒng)進(jìn)行專門的設(shè)計(jì)來處理分布式的數(shù)據(jù)。 客戶端需要安裝專用的客戶端軟件。首先涉及到安裝的工作量,其次任何一臺(tái)電腦出問題,如病毒、硬件損壞,都需要進(jìn)行安裝或維護(hù)。特別是有很多分部或?qū)Yu店的情況,不是工作量的問題,而是路程的問題。還有,系統(tǒng)軟件升級(jí)時(shí),每一臺(tái)客戶機(jī)需要重新安裝,其維護(hù)和升級(jí)成本非常高。 天津科技大學(xué) 2021 屆本科生畢業(yè)設(shè)計(jì) 9 第三章 系統(tǒng)分析與設(shè)計(jì)方案 第一節(jié) 開發(fā)環(huán)境及工具 本系統(tǒng)所用的工具: 服務(wù)器端:( Windows平臺(tái))首先應(yīng)有 Java環(huán)境 jdk,建議采用 ; Eclipse。 客戶端: Java 環(huán)境 jdk,建議 ; Eclipse。 本系統(tǒng)運(yùn)行所需用到的環(huán)境為 : 硬件配置 : 中央處理器( CPU) : P4 以上的處理器; 硬 盤: 40GB 以上硬盤; 內(nèi) 存: 256 以上的 DDR 內(nèi)存; 顯 卡: 128M 以上顯存顯卡 軟件配置: WINDOWS XP 版本、 AllInOneEclipse31 等。 第二節(jié) 聊天系統(tǒng)的總體設(shè)計(jì)要點(diǎn) 一、實(shí)現(xiàn)思想 在 Inter 上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過客戶端程 序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶交談,這是一個(gè)面向連接的通信過程。因此,程序要在 TCP/IP 環(huán)境下,實(shí)現(xiàn)服務(wù)器端和客戶端兩部分程序。 服務(wù)器端工作流程 : 服務(wù)器端通過系統(tǒng)調(diào)用創(chuàng)建一個(gè) ServerSocket 與指定的本地端口綁定,就可以在端口進(jìn)行偵聽。如果有客戶端連接請(qǐng)求,則創(chuàng)建一個(gè) Socket,將客戶端地址賦給這個(gè) Socket。然后登錄成功的客戶就可以在服務(wù)器上聊天了。 客戶端工作流程 : 客戶端程序相對(duì)簡單,只需要建立一個(gè) Socket 與服務(wù)器端連接,成功后通過這個(gè) Socket 來發(fā)送和接收數(shù)據(jù) 就可以了。 二、 系統(tǒng)功能流圖: 天津科技大學(xué) 2021 屆本科生畢業(yè)設(shè)計(jì) 10 圖 31 系統(tǒng)功能流圖 功能流 說明如下: ,服務(wù)器端創(chuàng)建一個(gè) ServerSocket 對(duì)象,指定端口號(hào)。 對(duì)象等候客戶端的連接請(qǐng)求。 ,登錄用戶。如果未注冊(cè),先注冊(cè)再登錄。登錄成功進(jìn)入聊天室用戶界面。 Socket 對(duì)象,指定主機(jī)地址和端口號(hào),向服務(wù)器發(fā)送連接請(qǐng)求。 ,建立一條 TCP 連接,再創(chuàng)建一個(gè) Socket 對(duì)象與 客戶端的 Socket 對(duì)象進(jìn)行通信。 /輸出流,進(jìn)行數(shù)據(jù)傳輸準(zhǔn)備。 ,通過字節(jié)輸出向?qū)Ψ桨l(fā)送數(shù)據(jù)。 ,向?qū)Ψ桨l(fā)送 結(jié)束 信息,另一方收到結(jié)束信息后,雙方分別關(guān)閉各自的 TCP 連接。 。 三、 多用戶實(shí)時(shí)工作原理圖 否 是 服務(wù)器 serversocket 監(jiān)聽 建立與客戶端連接的套接字 關(guān)閉 服務(wù)器 客戶端 socket 服務(wù)端信息 2.向服務(wù)器 寫 信息 關(guān)閉 客戶端 啟動(dòng) 啟動(dòng) 登錄 注冊(cè) 是否注冊(cè) 天津科技大學(xué) 2021 屆本科生畢業(yè)設(shè)計(jì) 11 圖 32 多用戶實(shí)時(shí)工作原理圖 注:服務(wù)器的 run()方法中采用了 while(true)結(jié)構(gòu),不斷監(jiān)聽客戶端的請(qǐng)求,如收到請(qǐng)求,建立與當(dāng)前請(qǐng)求的客戶端連接的 套接字,從而與客戶端建立聯(lián)系。 第三節(jié) 系統(tǒng)的功能模塊劃分及設(shè)計(jì)原理 當(dāng)用戶聊天時(shí),將當(dāng)前用戶名、聊天對(duì)象、聊天內(nèi)容和是否私聊進(jìn)行封裝并且序列化,然后與服務(wù)器建立 Socket 連接,再用對(duì)象輸出流包裝 Socket 的輸出流將聊天信息對(duì)象發(fā)送給服務(wù)器端。當(dāng)用戶發(fā)送聊天信息時(shí),服務(wù)端將會(huì)收到客戶端用 Socket 傳輸過來的聊天信息對(duì)象,然后將其強(qiáng)制轉(zhuǎn)換為 Chat 對(duì)象,并將本次用戶的聊天信息對(duì)象添加到聊天對(duì)象集 Message 中,以供所有聊天用戶訪問。接收用戶的聊天信息是由多線程技術(shù)實(shí)現(xiàn)的,因?yàn)榭蛻舳吮仨殨r(shí)時(shí)關(guān)注更新服 務(wù)器上是否有最新消息,在本程序中設(shè)定的是 1 秒刷新服務(wù)器一次,如果間隔時(shí)間太短將會(huì)增加客戶端與服務(wù)器端的通信負(fù)擔(dān),而間隔時(shí)間長就會(huì)讓人感覺沒有時(shí)效性,所以經(jīng)過權(quán)衡后認(rèn)為 1 秒最佳,因?yàn)槊總€(gè)用戶都不可能在 1 秒內(nèi)連續(xù)發(fā)送信息。當(dāng)每次用戶接收到聊天信息后將會(huì)開始分析聊天信息然后將適合自己的信息人性化顯示在聊天信息界面上。 一、 服務(wù)器程序模塊 () 服務(wù)器與客戶間通過套接口 Socket(TCP)連接。在 Java 中使用套接口相當(dāng)簡單, Java API 為處理套接口的通信提供了一個(gè)類 ,使得編寫網(wǎng)絡(luò)應(yīng)用程序相對(duì)容易。服務(wù)器采用多線程以滿足多用戶的請(qǐng)求,并通過創(chuàng)建一個(gè)ServerSocket 對(duì)象來監(jiān)聽來自客戶的連接請(qǐng)求,默認(rèn)端口為 8000,然后無限循環(huán)調(diào)用 accept()方法接受客戶程序的連接。 天津科技大學(xué) 2021 屆本科生畢業(yè)設(shè)計(jì) 12 服務(wù)器具有以下功能: ,建立偵聽,接受客戶端連接。 。 (登錄信息的驗(yàn)證反饋、注冊(cè)信息的驗(yàn)證和反饋、轉(zhuǎn)發(fā)聊天信息等) 。 ,并向客戶端發(fā)送服務(wù)器關(guān)閉消息。 服 務(wù)器程序模塊源碼: private ServerSocket serverSocket。 private ServerFrame sFrame。 private static Vector userOnline = new Vector(1, 1)。 private static Vector v = new Vector(1, 1)。 //創(chuàng)建服務(wù)器 啟動(dòng)服務(wù)監(jiān)聽 1001 端口 public AppServer() { sFrame = new ServerFrame()。 try { serverSocket = new ServerSocket(1001)。 // 獲取服務(wù)器的主機(jī)名和 IP 地址 IAddress address = ()。 (())。 (())。 (1001)。 } catch (IOException e) { fail(e, 不能啟動(dòng)服務(wù)! )。 } (已啟動(dòng) ...)。 ()。 // 啟動(dòng)線程 } public static void fail(Exception e, String str) { (str + 。 + e)。 } /** * 監(jiān)聽客戶的請(qǐng)求,當(dāng)有用戶請(qǐng)求時(shí)創(chuàng)建 Connection 線程 */ public void run() { try { while (true) 天津科技大學(xué) 2021 屆本科生畢業(yè)設(shè)計(jì) 13 { // 監(jiān)聽并接受客戶的請(qǐng)求 Socket client = ()。 new Connection(sFrame, client, userOnline, v)。 // 支持多線程 } } catch (IOException e) { fail(e, 不能監(jiān)聽! )。 } } /** * 啟動(dòng)服務(wù)器 */ public static void main(String args[]) { new AppServer()。 } } 當(dāng)用戶發(fā)送聊天信息時(shí),服務(wù)端將會(huì)收到客戶端用 Socket 傳輸過來的聊天信息對(duì)象,然后將其強(qiáng)制轉(zhuǎn)換為 Chat 對(duì)象,并將本次用戶的聊天信息對(duì)象添加到聊天對(duì)象集 Message 中,以供所有聊天用戶訪問。 二 、登錄程序模塊( ) 是客戶端程序登錄界面,負(fù)責(zé)用戶帳號(hào)信息的驗(yàn)證與接收服務(wù)器的反饋??蛻舳苏?qǐng)求連接,服務(wù)器的 accept()方法建立與客戶端的套接字連接??蛻舳藢⒌卿浶畔⒎庋b成 Customer 對(duì)象通過輸出流發(fā)送服務(wù) 器,等待服務(wù)器的驗(yàn)證,服務(wù)器反饋驗(yàn)證信息,客戶端根據(jù)反饋信息進(jìn)行登錄和登錄信息錯(cuò)誤處理。 關(guān)鍵代碼如下: public void actionPerformed(ActionEvent ae) { Object source = ()。 if ((btnLogin)) { // 判斷用戶名和密碼是否為空 if (().equals()|| ().equals()) { JOptionPane op1 = new JOptionPane()。 (null, 用戶名或密碼不能為空 )。 } else { strServerIp = ()。 login()。 } 天津科技大學(xué) 2021 屆本科生畢業(yè)設(shè)計(jì) 14 } if ((btnRegister)) { strServerIp = ()。 ()。 new Register(strServerIp)。 } if (source == btnExit) { (0)。 } } // actionPerformed()結(jié)束 public void login() { // 接受客戶的詳細(xì)資料 Customer data = new Customer()。 = ()。 = ()。 try { // 連接到服 務(wù)器 Socket toServer。 toServer = new Socket(strServerIp, 1001)。 ObjectOutputStream treamToServer= new ObjectOutputStream(toServer .getOutputStream())。 // 寫客戶詳細(xì)資料到服務(wù)器 socket ((Customer) data)。 // 讀來自服務(wù)器 socket 的登錄狀態(tài) BufferedReader fromServer = new BufferedReader( new InputStreamReader(()))。 String status = ()。 if ((登錄成功 )) { new ChatRoom((String) , strServerIp)。 ()。 // 關(guān)閉流對(duì) 象 ()。 ()。 ()。 } else { (null, status)。 // 關(guān)閉流對(duì)象 ()。 ()。 天津科技大學(xué) 2021 屆本科生畢業(yè)設(shè)計(jì) 15 ()。 } } catch (ConnectException e1) { (null, 未能建立到指定服務(wù)器的連接 !)。 } catch (InvalidClassException e2) { (null, 類錯(cuò)誤 !)。 } catch (NotSerializableException e3) { (null, 對(duì)象未序列化 !)。 } catch (IOException e4) { (null, 不能寫入到指定服務(wù)器 !)。 } } // login()結(jié)束 /** * 啟動(dòng)登陸窗體 * @param args */ public static void main(String args[]) { new Login()。 } 三 、注冊(cè)程序模塊 () 為客戶端程序注冊(cè)界面,負(fù)責(zé)用戶帳號(hào)信息的注冊(cè)驗(yàn)證與反饋。注冊(cè)模塊的原理跟登錄模塊基本相同。注冊(cè)信息封裝成 Register_Customer 對(duì)象,但服務(wù)器只驗(yàn)證用戶名,且只要求用戶名不重復(fù),服務(wù)器檢驗(yàn)注冊(cè)信息文件中的用戶名,若不重復(fù)則反饋?zhàn)?cè)成功的信息。其他的注冊(cè)信息(密碼、年齡、郵箱)合法性都交給注冊(cè)模塊自己完成。 關(guān)鍵代碼如下: public void actionPerformed(Action
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1