網(wǎng)絡(luò)編程課程設(shè)計(jì)(共16頁)_第1頁
網(wǎng)絡(luò)編程課程設(shè)計(jì)(共16頁)_第2頁
網(wǎng)絡(luò)編程課程設(shè)計(jì)(共16頁)_第3頁
網(wǎng)絡(luò)編程課程設(shè)計(jì)(共16頁)_第4頁
網(wǎng)絡(luò)編程課程設(shè)計(jì)(共16頁)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上課 程 設(shè) 計(jì) 說 明 書 課程名稱: 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ò)聊天室摘要: 隨著我國經(jīng)濟(jì)發(fā)展和網(wǎng)絡(luò)的普及,網(wǎng)絡(luò)技術(shù)也越來越多地被應(yīng)用于日常工作之中。在程序設(shè)計(jì)領(lǐng)域,面向?qū)ο蟮木幊碳夹g(shù)正在逐步代替面向過程的程序設(shè)計(jì)技術(shù),成為計(jì)算機(jī)應(yīng)用設(shè)計(jì)開發(fā)的主流,對(duì)于人與人之間通過網(wǎng)絡(luò)的溝通和交流,聊天室是人們最常見、最直接的交流的方式。本聊天系統(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)用程序開發(fā)設(shè)計(jì)的,其主要特性是簡單、面向?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ò)程序越來越顯得重要。利用TCP/IP協(xié)議提供的編程接口Socket(套接字)可以開發(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)用程序是通過客戶機(jī)/服務(wù)器(C/S)作用方式模式在網(wǎng)絡(luò)(應(yīng)用)編程界面實(shí)現(xiàn)的。本次實(shí)驗(yàn)采用java語言設(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ò)聊天越來越受到各種網(wǎng)民所青睞。因此開發(fā)網(wǎng)絡(luò)聊天是相當(dāng)有必要,而且在網(wǎng)站內(nèi)增加聊天功能,它不僅可以提高網(wǎng)站的訪問量,同時(shí)可以留著訪客,更重要的是讓訪客透過聊天室實(shí)時(shí)的互相交流。而小組成員也都學(xué)習(xí)過JAVA語言,對(duì)網(wǎng)絡(luò)編程也較有興趣,為了更好的考驗(yàn)自己對(duì)JAVA語言的掌握程度,小組成員一致決定以基于JAVA的網(wǎng)絡(luò)聊天室為課程設(shè)計(jì),希望通過這一

4、次能進(jìn)一步提高我們的網(wǎng)絡(luò)開發(fā)編程的能力。1.2系統(tǒng)簡介聊天系統(tǒng)不外乎兩個(gè)方面,服務(wù)器端和客戶端。這里簡要分析一下兩個(gè)方面所要完成的任務(wù):服務(wù)器端的任務(wù):1、服務(wù)器端應(yīng)當(dāng)建立一個(gè)ServerSocket,并且不斷進(jìn)行偵聽是否有客戶端連接或者斷開連接。2、服務(wù)器端應(yīng)當(dāng)是一個(gè)信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息。 客戶端的任務(wù):1、與服務(wù)器端建立通信通道,向服務(wù)器端發(fā)送信息。2、接收來自服務(wù)器的信息。2. 系統(tǒng)開發(fā)技術(shù)2.1 JAVA網(wǎng)絡(luò)編程技術(shù)JAVA豐富的類庫提供了大量的類以滿足網(wǎng)絡(luò)化、多線程、面向?qū)ο笙到y(tǒng)的需要。語言包提供的支持包括字符串處理、多線程處理、數(shù)

5、學(xué)函數(shù)處理等,可以用它簡單地實(shí)現(xiàn)JAVA程序的運(yùn)行平臺(tái)。實(shí)用程序包提供的支持包括哈希表、堆棧、可變數(shù)組、時(shí)間和日期等。輸入輸出包用統(tǒng)一的"流"模型來實(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ù)器模型的程序設(shè)計(jì)。2.2 Socket套接字 Socket,簡稱套接字,用于實(shí)現(xiàn)網(wǎng)

6、絡(luò)上客戶和服務(wù)器之間的連接。具體的說:一個(gè)服務(wù)器應(yīng)用程序一般偵聽一個(gè)特定的端口等待客戶端的連接請(qǐng)求,當(dāng)一個(gè)連接請(qǐng)求到達(dá)時(shí),客戶端和服武器端建立一個(gè)通信連接,在連接過程中,客戶端被分配一個(gè)本地端口與一個(gè)Socket建立連接,客戶端通過寫Socket來通知服務(wù)器,以讀Socket中的信息,類似的服務(wù)器也獲得一個(gè)本地端口,它需要一個(gè)新的端口號(hào)來偵聽原始端口上的其他連接請(qǐng)求。服務(wù)器也通過它的本地端口連接一個(gè)Socket,通過讀寫和客戶端通信。Socket程序的工作過程:1.建立Socket連接:在通信開始之前由通信雙方確認(rèn)身份,建立一條專用的虛擬連接道。2.數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進(jìn)行通

7、信。3.關(guān)閉:通信結(jié)束時(shí),再將所建的虛擬連接拆除。具體如下:1服務(wù)器serversocket2監(jiān)聽4.連接5讀6寫7關(guān)閉3客戶端socket6讀5寫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ā)送給自己或所有人的消息。 斷開連接:與服務(wù)器斷開連接,無法發(fā)送與接收信息。服務(wù)器端: 啟動(dòng)服務(wù):綁定套接字,處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)。 偵聽客戶端:端一旦監(jiān)聽到套接字的連接請(qǐng)求,它就響應(yīng)套接字的請(qǐng)求,一旦客戶端確認(rèn)了此描述,連接就建立好了。而端繼續(xù)處于,繼續(xù)接收其他套接字的連接請(qǐ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方法,通過IO流對(duì)象,向服務(wù)器發(fā)送數(shù)據(jù)流。5. 通訊完成后,關(guān)閉打開的IO對(duì)象和Socket。 服務(wù)器端:1. 在服務(wù)器,用一個(gè)端口來實(shí)例化一個(gè) ServerSocket對(duì)象。此時(shí),服務(wù)器就可以這個(gè)端口時(shí)刻監(jiān)聽從客戶端發(fā)來的連接請(qǐng)求。2. 調(diào)用ServerSocket的accept方法,開始監(jiān)聽連接從端口上發(fā)來的連接請(qǐng)求。3. 利用accept方法返回的客戶端的Socket對(duì)象,進(jìn)行讀寫IO的操作。4.

10、 通訊完成后,關(guān)閉打開的流和Socket對(duì)象4.2類的設(shè)計(jì)與分析1. ServerUI類:服務(wù)器端界面類,主要負(fù)責(zé)服務(wù)器端的界面設(shè)計(jì)2. Server類:此類負(fù)責(zé)創(chuàng)建綁定到指定服務(wù)器端口號(hào)的套接字 ,等待客戶端連接3. ListenerClient類:此類負(fù)責(zé)偵聽客戶端發(fā)送信息并將信息廣播出去4. ClientUI類:客戶端界面類,主要負(fù)責(zé)客戶端的界面設(shè)計(jì)5. ClientThread類:此類創(chuàng)建連接到服務(wù)器端的套接字,讀取輸入內(nèi)容并發(fā)送4.3客戶端模塊部分代碼客戶端界面部分: public ClientUI() super("客戶端"); /創(chuàng)建ClientUI類的對(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)聽器對(duì)象,監(jiān)聽按鈕發(fā)生的動(dòng)作; *如果“啟動(dòng)連接”按鈕被按下,則將創(chuàng)建的ClientUI的對(duì)象作

12、為參數(shù)傳遞給ClientThread類 * */ btStart.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) /構(gòu)造匿名內(nèi)部類來實(shí)現(xiàn)接口ActionListener server = new ClientThread(ClientUI.this); ); /*創(chuàng)建“發(fā)送信息”按鈕的監(jiān)聽器對(duì)象,監(jiān)聽按鈕發(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)聽器,監(jiān)聽窗口的動(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類構(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() /線程開啟后,執(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ì)象,偵聽并接受到此套接字的連接,在連接傳入之前一直阻塞 ui.clients.add(client); /如果與客戶端套接字連接成功,則將此客戶端套接字添加到列表中 println("連接成功" + client.toString(); /將客戶端套接字轉(zhuǎn)換為字符串輸出 new ListenerClient(ui, client); /創(chuàng)建服務(wù)器端與客戶端的監(jiān)聽器 catch (IOException e) /如果服務(wù)器啟動(dòng)失敗,輸出相應(yīng)信息

18、println("啟動(dòng)服務(wù)器失?。憾丝?228"); println(e.toString(); e.printStackTrace(); 服務(wù)器端偵聽部分: 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論