




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上課 程 設(shè) 計(jì) 說(shuō) 明 書(shū) 課程名稱: Windows網(wǎng)絡(luò)編程 設(shè)計(jì)題目: 基于JAVA網(wǎng)絡(luò)聊天室設(shè)計(jì) 學(xué) 院: 計(jì)算機(jī)科學(xué)與信息工程學(xué)院 專業(yè)班級(jí): 網(wǎng)絡(luò)工程12級(jí) 指導(dǎo)教師: 小組成員: 2015年6月目錄專心-專注-專業(yè)網(wǎng)絡(luò)聊天室摘要: 隨著我國(guó)經(jīng)濟(jì)發(fā)展和網(wǎng)絡(luò)的普及,網(wǎng)絡(luò)技術(shù)也越來(lái)越多地被應(yīng)用于日常工作之中。在程序設(shè)計(jì)領(lǐng)域,面向?qū)ο蟮木幊碳夹g(shù)正在逐步代替面向過(guò)程的程序設(shè)計(jì)技術(shù),成為計(jì)算機(jī)應(yīng)用設(shè)計(jì)開(kāi)發(fā)的主流,對(duì)于人與人之間通過(guò)網(wǎng)絡(luò)的溝通和交流,聊天室是人們最常見(jiàn)、最直接的交流的方式。本聊天系統(tǒng)以聊天交流為主,為廣大用戶提供一個(gè)借助網(wǎng)絡(luò)進(jìn)行人際交往的平臺(tái),也是網(wǎng)絡(luò)與
2、現(xiàn)實(shí)最貼近的實(shí)用型應(yīng)用。本文所介紹的網(wǎng)絡(luò)聊天系統(tǒng)是基于JAVA應(yīng)用程序開(kāi)發(fā)設(shè)計(jì)的,其主要特性是簡(jiǎn)單、面向?qū)ο?、分布式、解釋?zhí)行、安全、體系結(jié)構(gòu)中立、可移植、高性能、多線程以及動(dòng)態(tài)性。關(guān)鍵詞:局域網(wǎng)、聊天室、JAVA、Socket、WindowsSocket引言: 目前,基于TCP/IP協(xié)議的網(wǎng)絡(luò)得到了普及和飛速的發(fā)展,Windows下的網(wǎng)絡(luò)程序越來(lái)越顯得重要。利用TCP/IP協(xié)議提供的編程接口Socket(套接字)可以開(kāi)發(fā)出TCP/IP應(yīng)用程序。正確的使用WindowsSocket,就可使得不同地址下的進(jìn)程得以在Windows環(huán)境下順利進(jìn)行各種網(wǎng)絡(luò)通信,因此研究WinSock更有意義。而基于T
3、CP/IP協(xié)議網(wǎng)絡(luò)環(huán)境下的應(yīng)用程序是通過(guò)客戶機(jī)/服務(wù)器(C/S)作用方式模式在網(wǎng)絡(luò)(應(yīng)用)編程界面實(shí)現(xiàn)的。本次實(shí)驗(yàn)采用java語(yǔ)言設(shè)計(jì)一個(gè)基于C/S模式的TCP網(wǎng)絡(luò)通訊程序。實(shí)現(xiàn)客戶端與服務(wù)器端之間的數(shù)據(jù)傳輸。1.需求分析1.1需求分析根據(jù)當(dāng)前網(wǎng)絡(luò)的需求,網(wǎng)絡(luò)聊天越來(lái)越受到各種網(wǎng)民所青睞。因此開(kāi)發(fā)網(wǎng)絡(luò)聊天是相當(dāng)有必要,而且在網(wǎng)站內(nèi)增加聊天功能,它不僅可以提高網(wǎng)站的訪問(wèn)量,同時(shí)可以留著訪客,更重要的是讓訪客透過(guò)聊天室實(shí)時(shí)的互相交流。而小組成員也都學(xué)習(xí)過(guò)JAVA語(yǔ)言,對(duì)網(wǎng)絡(luò)編程也較有興趣,為了更好的考驗(yàn)自己對(duì)JAVA語(yǔ)言的掌握程度,小組成員一致決定以基于JAVA的網(wǎng)絡(luò)聊天室為課程設(shè)計(jì),希望通過(guò)這一
4、次能進(jìn)一步提高我們的網(wǎng)絡(luò)開(kāi)發(fā)編程的能力。1.2系統(tǒng)簡(jiǎn)介聊天系統(tǒng)不外乎兩個(gè)方面,服務(wù)器端和客戶端。這里簡(jiǎn)要分析一下兩個(gè)方面所要完成的任務(wù):服務(wù)器端的任務(wù):1、服務(wù)器端應(yīng)當(dāng)建立一個(gè)ServerSocket,并且不斷進(jìn)行偵聽(tīng)是否有客戶端連接或者斷開(kāi)連接。2、服務(wù)器端應(yīng)當(dāng)是一個(gè)信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息。 客戶端的任務(wù):1、與服務(wù)器端建立通信通道,向服務(wù)器端發(fā)送信息。2、接收來(lái)自服務(wù)器的信息。2. 系統(tǒng)開(kāi)發(fā)技術(shù)2.1 JAVA網(wǎng)絡(luò)編程技術(shù)JAVA豐富的類(lèi)庫(kù)提供了大量的類(lèi)以滿足網(wǎng)絡(luò)化、多線程、面向?qū)ο笙到y(tǒng)的需要。語(yǔ)言包提供的支持包括字符串處理、多線程處理、數(shù)
5、學(xué)函數(shù)處理等,可以用它簡(jiǎn)單地實(shí)現(xiàn)JAVA程序的運(yùn)行平臺(tái)。實(shí)用程序包提供的支持包括哈希表、堆棧、可變數(shù)組、時(shí)間和日期等。輸入輸出包用統(tǒng)一的"流"模型來(lái)實(shí)現(xiàn)所有格式的I/O,包括文件系統(tǒng)、網(wǎng)絡(luò)、輸入低級(jí)網(wǎng)絡(luò)包用于實(shí)現(xiàn)Socket編程。抽象圖形用戶接口包實(shí)現(xiàn)了不同平臺(tái)的計(jì)算機(jī)的圖形用戶接口部件, 包括窗口、菜單、滾動(dòng)條、對(duì)話框等,使得JAVA可以移植到不同平臺(tái)的機(jī)器。網(wǎng)絡(luò)包支持Internet的TCP/IP協(xié)議,提供了與Internet的接口。它支持URL連接,WWW的即時(shí)訪問(wèn),并且簡(jiǎn)化了用戶/服務(wù)器模型的程序設(shè)計(jì)。2.2 Socket套接字 Socket,簡(jiǎn)稱套接字,用于實(shí)現(xiàn)網(wǎng)
6、絡(luò)上客戶和服務(wù)器之間的連接。具體的說(shuō):一個(gè)服務(wù)器應(yīng)用程序一般偵聽(tīng)一個(gè)特定的端口等待客戶端的連接請(qǐng)求,當(dāng)一個(gè)連接請(qǐng)求到達(dá)時(shí),客戶端和服武器端建立一個(gè)通信連接,在連接過(guò)程中,客戶端被分配一個(gè)本地端口與一個(gè)Socket建立連接,客戶端通過(guò)寫(xiě)Socket來(lái)通知服務(wù)器,以讀Socket中的信息,類(lèi)似的服務(wù)器也獲得一個(gè)本地端口,它需要一個(gè)新的端口號(hào)來(lái)偵聽(tīng)原始端口上的其他連接請(qǐng)求。服務(wù)器也通過(guò)它的本地端口連接一個(gè)Socket,通過(guò)讀寫(xiě)和客戶端通信。Socket程序的工作過(guò)程:1.建立Socket連接:在通信開(kāi)始之前由通信雙方確認(rèn)身份,建立一條專用的虛擬連接道。2.數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進(jìn)行通
7、信。3.關(guān)閉:通信結(jié)束時(shí),再將所建的虛擬連接拆除。具體如下:1服務(wù)器serversocket2監(jiān)聽(tīng)4.連接5讀6寫(xiě)7關(guān)閉3客戶端socket6讀5寫(xiě)7關(guān)閉 圖1 Socket套接字的建立與連接2.3 TCP三次握手第一次握手:原主機(jī)發(fā)送一個(gè)帶有本次連接的序號(hào)的請(qǐng)求的一個(gè)數(shù)據(jù)幀第二次握手:目的主機(jī)收到請(qǐng)求后,如果同意連接,則發(fā)回一個(gè)帶有一個(gè)本次連接序號(hào)和源端機(jī)連接序列號(hào)的確認(rèn)。第三此握手:源端機(jī)收到含有兩次初始序列號(hào)的應(yīng)答后,再向目的主機(jī)發(fā)送一個(gè)帶有兩次連接的序列號(hào)的確認(rèn)。3. 系統(tǒng)總框圖與功能分析3.1系統(tǒng)總框圖 圖2 聊天系統(tǒng)框架圖3.2系統(tǒng)功能模塊分析 圖3 系統(tǒng)功能圖客戶端: 啟動(dòng)連接:
8、默認(rèn)連接IP為,端口為1228。 聊天:用戶可以給所有人發(fā)送信息,并能看到其他用戶發(fā)送給自己或所有人的消息。 斷開(kāi)連接:與服務(wù)器斷開(kāi)連接,無(wú)法發(fā)送與接收信息。服務(wù)器端: 啟動(dòng)服務(wù):綁定套接字,處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)。 偵聽(tīng)客戶端:端一旦監(jiān)聽(tīng)到套接字的連接請(qǐng)求,它就響應(yīng)套接字的請(qǐng)求,一旦客戶端確認(rèn)了此描述,連接就建立好了。而端繼續(xù)處于,繼續(xù)接收其他套接字的連接請(qǐng)求 斷開(kāi)連接:與客戶端斷開(kāi)連接,無(wú)法偵聽(tīng)連接客戶端。4. 系統(tǒng)模塊代碼設(shè)計(jì)與分析4.1系統(tǒng)流程分析客戶端:1. 用服務(wù)器的IP地址和端口號(hào)實(shí)例化Socket對(duì)象。2. 調(diào)用connect方法,連接到服務(wù)器上
9、。3. 將發(fā)送到服務(wù)器的IO流填充到IO對(duì)象里,比如BufferedReader/PrintWriter。4. 利用Socket提供的getInputStream和getOutputStream方法,通過(guò)IO流對(duì)象,向服務(wù)器發(fā)送數(shù)據(jù)流。5. 通訊完成后,關(guān)閉打開(kāi)的IO對(duì)象和Socket。 服務(wù)器端:1. 在服務(wù)器,用一個(gè)端口來(lái)實(shí)例化一個(gè) ServerSocket對(duì)象。此時(shí),服務(wù)器就可以這個(gè)端口時(shí)刻監(jiān)聽(tīng)從客戶端發(fā)來(lái)的連接請(qǐng)求。2. 調(diào)用ServerSocket的accept方法,開(kāi)始監(jiān)聽(tīng)連接從端口上發(fā)來(lái)的連接請(qǐng)求。3. 利用accept方法返回的客戶端的Socket對(duì)象,進(jìn)行讀寫(xiě)IO的操作。4.
10、 通訊完成后,關(guān)閉打開(kāi)的流和Socket對(duì)象4.2類(lèi)的設(shè)計(jì)與分析1. ServerUI類(lèi):服務(wù)器端界面類(lèi),主要負(fù)責(zé)服務(wù)器端的界面設(shè)計(jì)2. Server類(lèi):此類(lèi)負(fù)責(zé)創(chuàng)建綁定到指定服務(wù)器端口號(hào)的套接字 ,等待客戶端連接3. ListenerClient類(lèi):此類(lèi)負(fù)責(zé)偵聽(tīng)客戶端發(fā)送信息并將信息廣播出去4. ClientUI類(lèi):客戶端界面類(lèi),主要負(fù)責(zé)客戶端的界面設(shè)計(jì)5. ClientThread類(lèi):此類(lèi)創(chuàng)建連接到服務(wù)器端的套接字,讀取輸入內(nèi)容并發(fā)送4.3客戶端模塊部分代碼客戶端界面部分: public ClientUI() super("客戶端"); /創(chuàng)建ClientUI類(lèi)的對(duì)象
11、btStart = new JButton("啟動(dòng)連接");/啟動(dòng)連接按鈕 btSend = new JButton("發(fā)送信息");/發(fā)送信息按鈕 tfSend = new JTextField(10);/構(gòu)造一個(gè)列數(shù)為10的空TextField tfIP = new JTextField(10); tfPost = new JTextField(5); taShow = new JTextArea(); /創(chuàng)建一個(gè)空的文本區(qū)域 /*創(chuàng)建“啟動(dòng)連接”按鈕的監(jiān)聽(tīng)器對(duì)象,監(jiān)聽(tīng)按鈕發(fā)生的動(dòng)作; *如果“啟動(dòng)連接”按鈕被按下,則將創(chuàng)建的ClientUI的對(duì)象作
12、為參數(shù)傳遞給ClientThread類(lèi) * */ btStart.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) /構(gòu)造匿名內(nèi)部類(lèi)來(lái)實(shí)現(xiàn)接口ActionListener server = new ClientThread(ClientUI.this); ); /*創(chuàng)建“發(fā)送信息”按鈕的監(jiān)聽(tīng)器對(duì)象,監(jiān)聽(tīng)按鈕發(fā)生的動(dòng)作; *如果“發(fā)送信息”按鈕被按下,則將獲取用戶輸入到文本框內(nèi)的內(nèi)容 * */ btSend.addActionListener(new ActionListener()
13、 public void actionPerformed(ActionEvent e) server.sendMsg(tfSend.getText(); tfSend.setText("");/設(shè)置文本框默認(rèn)內(nèi)容為空字符串 ); /*創(chuàng)建窗口監(jiān)聽(tīng)器,監(jiān)聽(tīng)窗口的動(dòng)作 *如果窗口被關(guān)閉,則會(huì)彈出”確定關(guān)閉嗎"的溫馨提示窗口,以便用戶選擇 *如果用戶選擇“是”,則關(guān)閉窗口 * */ this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) int a = JOp
14、tionPane.showConfirmDialog(null, "確定關(guān)閉嗎?", "溫馨提示", JOptionPane.YES_NO_OPTION); if (a = 1) System.exit(0); / 關(guān)閉 );客戶端連接部分: public ClientThread(ClientUI ui) /ClientThread類(lèi)構(gòu)造函數(shù),接收客戶端的界面對(duì)象 this.ui = ui; try client = new Socket("", 1228);/這里設(shè)置連接服務(wù)器端的IP的端口 println(&q
15、uot;連接服務(wù)器成功:端口1228"); reader = new BufferedReader(new InputStreamReader( client.getInputStream(); /構(gòu)造客戶端輸入流并將字節(jié)轉(zhuǎn)換為字符 writer = new PrintWriter(client.getOutputStream(), true); / 如果為 true,則 println、printf 或 format 方法將刷新輸出緩沖區(qū) catch (IOException e) println("連接服務(wù)器失?。憾丝?228"); println(e.toS
16、tring(); e.printStackTrace(); this.start(); /啟動(dòng)客戶端線程4.4服務(wù)器端模塊部分代碼:服務(wù)器端啟動(dòng)部分: public void run() /線程開(kāi)啟后,執(zhí)行以下操作 try ss = new ServerSocket(1228); /創(chuàng)建綁定到端口號(hào)為1228的服務(wù)器套接字對(duì)象 ui.clients=new ArrayList<Socket>();/構(gòu)造一個(gè)包含指定端口號(hào)的連接客戶端的列表,啟動(dòng)服務(wù)器 println("啟動(dòng)服務(wù)器成功:端口1228"); while (true) /如果服務(wù)器啟動(dòng)成功,執(zhí)行以下操
17、作 println("等待客戶端"); Socket client = ss.accept(); /創(chuàng)建套接字對(duì)象,偵聽(tīng)并接受到此套接字的連接,在連接傳入之前一直阻塞 ui.clients.add(client); /如果與客戶端套接字連接成功,則將此客戶端套接字添加到列表中 println("連接成功" + client.toString(); /將客戶端套接字轉(zhuǎn)換為字符串輸出 new ListenerClient(ui, client); /創(chuàng)建服務(wù)器端與客戶端的監(jiān)聽(tīng)器 catch (IOException e) /如果服務(wù)器啟動(dòng)失敗,輸出相應(yīng)信息
18、println("啟動(dòng)服務(wù)器失?。憾丝?228"); println(e.toString(); e.printStackTrace(); 服務(wù)器端偵聽(tīng)部分: public void run() String msg = "" while (true) try reader = new BufferedReader(new InputStreamReader( client.getInputStream(); writer = new PrintWriter(client.getOutputStream(), true); msg = reader.re
19、adLine(); sendMsg(msg); catch (IOException e) println(e.toString(); / e.printStackTrace(); break; if (msg != null && msg.trim() != "") println(">>" + msg); /把信息廣播到所有用戶 public synchronized void sendMsg(String msg) try for (int i = 0; i < ui.clients.size(); i+) Socket client = ui.clients.get(i); writer =
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 汽車(chē)行業(yè)合同樣本:會(huì)員服務(wù)協(xié)議
- 移動(dòng)基站租賃合同書(shū)范本
- 城市老舊小區(qū)消防系統(tǒng)改造項(xiàng)目合同
- 幼兒園臨時(shí)教師聘任合同
- 新版民間房產(chǎn)抵押權(quán)轉(zhuǎn)讓合同
- 腎性水腫課件
- 智能化煤礦培訓(xùn)課件下載
- 舊貨零售互聯(lián)網(wǎng)+創(chuàng)新實(shí)踐考核試卷
- 搪瓷器的創(chuàng)造思維與創(chuàng)意設(shè)計(jì)考核試卷
- 建筑施工現(xiàn)場(chǎng)安全監(jiān)測(cè)與預(yù)警考核試卷
- 2025年黑龍江交通職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)必考題
- 個(gè)人畫(huà)協(xié)議合同范本
- 2024-2025學(xué)年高一下學(xué)期開(kāi)學(xué)第一節(jié)課(哪吒精神)主題班會(huì)課件
- 人教版2025-初中物理實(shí)驗(yàn)室實(shí)驗(yàn)課程安排
- 2024年無(wú)錫科技職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 舞蹈藝術(shù)賞析課件
- 2025江蘇泰州興化市陳堡鎮(zhèn)村級(jí)后備干部招聘10人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- (完整版)python學(xué)習(xí)課件
- CNAS-RL01:2019實(shí)驗(yàn)室認(rèn)可規(guī)則
- 成人腦室外引流護(hù)理-中華護(hù)理學(xué)會(huì)團(tuán)體 標(biāo)準(zhǔn)
- 2024年甘肅省公務(wù)員考試《行測(cè)》真題及答案解析
評(píng)論
0/150
提交評(píng)論