




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 計算機網(wǎng)絡(luò) 課程設(shè)計報告課 題: 廣播通信設(shè)計 專 業(yè) 班 級: 計科10101班 姓名(學號): 晏麗君(201017010142) : 胡 濤 (201017010102) 指 導 教 師: 梅 曉 勇 評閱意見:評定成績: 指導老師簽名: 年 月 日目 錄目 錄1.目的和意義2 1.1 設(shè)計目的 2 1.2 設(shè)計意義 22.基本原理2 2.1概述 2 2.2作用 33.需求分析3 3.1系統(tǒng)功能需求分析 3 3.2 功能函數(shù)部分 34.概要設(shè)計3 4.1編程環(huán)境 3 4.2 模塊分析 45.詳細設(shè)計 4 5.1具體實現(xiàn)過程5 5.2主要數(shù)據(jù)結(jié)構(gòu)86.嗅探器的實現(xiàn)與測試8 6.1實現(xiàn)與測
2、試87.心得結(jié)論128.參考文獻 121.目的和意義1.1設(shè)計目的1掌握廣播通信技術(shù);2了解基于winsock api的消息機制和編程應用方法;3了解windows sdk編程架構(gòu)。1.2設(shè)計意義通過此次課程設(shè)計,能夠基本掌握廣播通信技術(shù),了解基于winsock api的消息機制和編程應用方法,以及windows sdk編程架構(gòu)。通過查閱資料,了解單播、廣播、多播的區(qū)別和聯(lián)系,以及各自的優(yōu)缺點和適應范圍,并能夠在此基礎(chǔ)上,完成廣播通信的設(shè)計。2.基本原理2.1概述根據(jù)socket通信原理實現(xiàn)網(wǎng)絡(luò)中的基于tcp方式的廣播通信。服務(wù)器端:(1)首先,在實用socket之前,要首先初始化socket
3、; (2)在初始化完成以后,就可以建立服務(wù)端的socket,然后實用該sokcet開始偵聽整個網(wǎng)絡(luò)中的連接請求。(3)當檢測到來自客戶端的連接請求時,向客戶端發(fā)送收到連接請求的信息,并建立與客戶端之間的連接。在建立連接的過程中,會產(chǎn)生一個新的socket,我們使用找個socket來進行數(shù)據(jù)的通信;(4)在通信的過程中,服務(wù)器端的產(chǎn)生的新的socket會通過一個消息響應函數(shù)來接受到達的數(shù)據(jù)。數(shù)據(jù)的發(fā)送可以使用servergui()來完成;(5)當完成通信后,服務(wù)器關(guān)閉與客戶端的socket連接??蛻舳耍海?)初始化socket,并建立客戶端的socket,確定要連接的服務(wù)器的主機名和端口;(2)
4、發(fā)送連接請求到服務(wù)器,并等待服務(wù)器的回饋信息;(3)連接成功后,與服務(wù)器進行數(shù)據(jù)的交互;(4)數(shù)據(jù)的讀取是通過listenserver()來完成的,數(shù)據(jù)的發(fā)送通過client gui()即可;(5)數(shù)據(jù)處理完畢后,關(guān)閉自身的socket連接。2.2作用主機之間采用“一對所有”的通訊模式,網(wǎng)絡(luò)對其中每一臺主機發(fā)出的信號都進行無條件復制并轉(zhuǎn)發(fā),所有主機都可以接收到所有信息(不管你是否需要),由于其不用路徑選擇,所以使得網(wǎng)絡(luò)成本可以很低廉。3.需求分析3.1系統(tǒng)功能需求分析在計算機網(wǎng)絡(luò)間的通信中,單播和組播有其獨特的優(yōu)勢:單播的信息的接收和傳遞只在兩個節(jié)點之間進行;多播既可以一次傳送所有的數(shù)據(jù),也可
5、以達到只對特定對象傳送數(shù)據(jù)的目的。雖然如此看來,單播和多播足以應對網(wǎng)絡(luò)間的通信。但是,他們也有一定的缺陷:單播的服務(wù)器針對每個客戶機發(fā)送數(shù)據(jù)流,在客戶數(shù)量大,客戶機流量大的流媒體應用中,服務(wù)器會不堪重負;而多播與單播協(xié)議相比沒有糾錯機制,發(fā)生丟包錯包后難以彌補。所以,這就使得廣播有了更大的需求和存在性。廣播不僅網(wǎng)絡(luò)設(shè)備簡單,維護簡單,布網(wǎng)成本低廉,而且由于服務(wù)器不用向每個客戶機單獨發(fā)送數(shù)據(jù),服務(wù)器流量負載極低。在此次廣播通信的設(shè)計中,通過啟動服務(wù)器,然后客戶端發(fā)送連接服務(wù)器的請求,便可實現(xiàn)服務(wù)器端到客戶端的廣播。3.2功能函數(shù)部分1.getinputstream() 說明:從對方獲取輸入流;2
6、. getoutputstream() 說明:從對方獲取輸出流;3. printstacktrace() 說明:將信息打印在控制臺上;4. elementat(i) 說明:返回vector里面存放的第i個元素;5.close() 說明:用于關(guān)閉一個被打開的的文件;6. run() 說明:為用戶界面線程提供默認的消息循環(huán);7. servergui()說明:服務(wù)器端的圖形界面設(shè)計;8. clientgui () 說明:客戶端的圖形界面設(shè)計;9.getcontentpane() 說明:初始化一個容器,用來在容器上添加上添加一些控件; 4概要設(shè)計4.1編程環(huán)境1.microsoft windows x
7、p操作系統(tǒng)2.eclipse3.7.2 軟件4.2模塊分析1.服務(wù)器模塊:服務(wù)器端需要引入兩個包,java.io包和包,io包是解決輸入輸出流的問題,net包包含了socket編程所需要的api,服務(wù)器端首先要得到serversocket的對象;服務(wù)器端socket對象通過accept()方法開始監(jiān)聽連接過來的客戶端信息。如果有客戶端信息過來,則對象soc調(diào)用輸入輸出流的方法,soc.getinputstream(),同時把得到的getinputstream封裝在datainputstream當中,在客戶端通信時,有可能兩端存在于不同的操作系統(tǒng),datainputstream可以很好的解決這個
8、問題。2.客戶端模塊:客戶端代碼與服務(wù)器端大多類似,有一點顯著不同,在客戶端沒有serversocket類,即客戶端不用監(jiān)聽任何連接,只需要發(fā)送即可。通過與服務(wù)器端的連接,就可以得到聊天對象soc??蛻舳吮仨毷紫韧ㄟ^readutf()讀取信息,才能接收服務(wù)器發(fā)送來的信息。 3.監(jiān)聽模塊:包含監(jiān)聽服務(wù)器端發(fā)送的消息listenserver()和監(jiān)聽客戶端發(fā)送的連接請求以及發(fā)送的消息listenclient()。 4.其他功能模塊:包含服務(wù)器端服務(wù)器的啟動,服務(wù)器的關(guān)閉以及客戶端的與服務(wù)器的連接和客戶端的關(guān)閉。5.詳細設(shè)計5.1具體實現(xiàn)過程1.流程圖 否是否是開 始服務(wù)器端輸入端口號,啟動服務(wù)器客
9、戶端輸入服務(wù)器端ip和端口號,請求連接是否正常啟動是否連接成功服務(wù)器端對客戶端進行廣播通信關(guān)閉服務(wù)器端與客戶端結(jié) 束圖1 具體實現(xiàn)過程流程圖2.服務(wù)器端: 運用線程thread,服務(wù)器端socket對象通過listenserver()開始監(jiān)聽連接過來的客戶端信息。如果有客戶端信息過來,則對象soc調(diào)用輸入輸出流的方法,soc.getinputstream(),同時把得到的getinputstream封裝在datainputstream當中。public class listenserver extends thread private datainputstream in; /使用規(guī)定的底層輸
10、入流創(chuàng)建一個datainputstream private dataoutputstream out; private socket soc; private jtextarea area; public listenserver(socket soc, jtextarea area) this.soc = soc; this.area = area; try this.in = new datainputstream(soc.getinputstream();/輸入流 this.out = new dataoutputstream(soc.getoutputstream();/輸出流 cat
11、ch (ioexception e) e.printstacktrace();/輸出異常信息 通過run()方法,為用戶界面線程提供默認的消息循環(huán)。 public void run() while (true) try string s = this.in.readutf();/轉(zhuǎn)化成utf-8編碼格式 this.area.append(s); continue; catch (ioexception e) joptionpane.showmessagedialog(null, 服務(wù)器異常,無法進行正常聊天,退出程序!); system.exit(0); try this.in.close()
12、; this.out.close(); this.soc.close(); catch (ioexception e1) e1.printstacktrace(); 3.客戶端:通過與服務(wù)器端的連接,就可以得到聊天對象soc。然后通過listenclient()方法,調(diào)用輸入輸出流的方法,將收到的信息數(shù)據(jù)打印在控制臺上。public class listenclient extends thread public int clientid; private datainputstream in; public dataoutputstream out; public socket soc; p
13、rivate vector v; private string s; private jtextarea area; private jtextfield field; public listenclient(int id, socket soc, vector v, jtextarea area, jtextfield field) this.clientid = id; this.soc = soc; this.v = v; this.area = area; this.field = field; try this.in = new datainputstream(soc.getinpu
14、tstream(); this.out = new dataoutputstream(soc.getoutputstream(); catch (ioexception e) e.printstacktrace(); /打印在控制臺上 public void run() while (true) int i; listenclient lc; try this.s = this.in.readutf(); this.area.append(客戶 + this.clientid + 說: + this.s); int i1 = 0; listenclient lc1 = (listenclien
15、t)this.v.elementat(i1); synchronized (lc1.out) /加鎖,相當于不管哪一個線程(例如線程a),運行到這個方法時,都要檢查有沒有其它線程b(或者c、 d等)正在用這個方法 lc1.out.writeutf(客戶 + this.clientid + 說: + this.s);待添加的隱藏文字內(nèi)容2 i1+; continue; catch (ioexception e) i = 0; lc = (listenclient)this.v.elementat(i);/返回vector里面存放的第i個元素 if (lc.clientid != this.cli
16、entid) continue; try lc.out.close(); lc.in.close(); lc.soc.close(); catch (ioexception e1) e1.printstacktrace();/輸出異常信息 this.v.remove(i); this.field.settext(string.valueof(this.v.size(); i+; if (i = this.v.size() continue; 5.2主要數(shù)據(jù)結(jié)構(gòu) (1)vector類該類在java.util包中,而且是同步的。由vector創(chuàng)建的tterator,雖然和arraylist創(chuàng)建的i
17、terator是同一接口,但是,因為vector是同步的,當一個iterator被創(chuàng)建而且正在被使用,另一個線程改變了vector的狀態(tài)(例如,添加或刪除了一些元素),這時調(diào)用iterator的方法將拋出concurrentmodificationexception,因此必須捕獲異常。6嗅探器的實現(xiàn)與測試6.1實現(xiàn)與測試運行servergui.java ,輸入端口號(0-65535)就可啟動服務(wù)器。并可以看到已經(jīng)連接的客戶端書數(shù)目。圖2 服務(wù)器端啟動服務(wù)器 運行clientgui.java,輸入服務(wù)器端的ip和端口號,如果輸入正確,就可建立與服務(wù)器端的連接。圖3 客戶端連接到服務(wù)器端 直接在服
18、務(wù)器端輸出消息(發(fā)送內(nèi)容不能為空)即可進行廣播??蛻暨B接數(shù)數(shù)目為多少就有多少個客戶端主機收到消息。圖4 客戶端廣播消息客戶端既能接收到服務(wù)器端的廣播消息,還能發(fā)送消息。圖5 客戶端接收與發(fā)送消息 服務(wù)器端與客戶端交互的過程中,由于操作不當會引起很多錯誤。以下是其中的三種情況。是ip或者端口號輸入錯誤,是無客戶端只有服務(wù)器端,是服務(wù)器已關(guān)閉。圖6 ip或者端口號輸入錯誤圖7 無客戶端連接圖8 關(guān)閉服務(wù)器端7.心得結(jié)論這次為期一周的計算機網(wǎng)絡(luò)課程設(shè)計,我的選題是廣播通信設(shè)計。剛開始拿到這個課題的時候,確實有點不知從何下手的感覺。說實話,編寫程序一直是我比較害怕的,所以對自己是否能夠完成任務(wù)很是擔心
19、??赡苓@個課題對于編程技術(shù)很高的人來說很簡單,但是對于我這個很少寫代碼的人來說是有點難度的。雖說對廣播通信的原理明白于心,可還是不知道怎么用代碼展示出來。于是,最先想到的是去網(wǎng)上查找資料,網(wǎng)上對于這個選題的資料還是蠻少的,找了很多還沒理出什么頭緒來。最后,不得不找班上的同學的幫忙,然后,他讓我用java語言寫一個圖形界面的服務(wù)端和客戶端,然后通過啟動,連接和監(jiān)聽實現(xiàn)服務(wù)器端的廣播功能。直到第四天,我們才大概做完了。雖有缺陷,但畢竟是自己在同學的幫助下做出來的,還是很開心的。一件事情,在做的過程中,雖有諸多磨難,諸多抱怨,但是完成這件事情之后的那種輕松愉悅的感覺是前所未有的。這個設(shè)計的完成,讓我學到了很多,也有很多同學要去感謝。首先,最顯而易見的是,讓我
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- TY/T 1108-2024體育賽事活動競賽規(guī)則編制規(guī)范
- 工程課題立項申報書
- 儲罐氣體銷售合同范本
- 代駕租賃合同范本
- Unit 3 Keep Fit section B 1a-1d 同步課時講練(含答案)七年級英語下冊(人教版2024)
- 原料購置合同范例
- 公司食堂 燃氣 合同范本
- 印刷紙箱合同范本
- 產(chǎn)品折扣合同范本
- 課題申報書怎么寫作
- 油漆使用登記記錄表
- 【知識點提綱】新教材-人教版高中化學必修第一冊全冊各章節(jié)知識點考點重點難點提煉匯總
- 高中語文基礎(chǔ)知識手冊薛金星
- 輪轂電機驅(qū)動電動車懸架和轉(zhuǎn)向系統(tǒng)設(shè)計與性能匹配
- 二年級第二學期體育知識結(jié)構(gòu)圖
- CASS勘測定界操作指導方案
- 中國商品條碼系統(tǒng)注冊登記表規(guī)范填寫
- 湘科教版小學信息技術(shù)四年級下冊全冊教案.doc
- JJG 840-1993 函數(shù)信號發(fā)生器檢定規(guī)程
- 胃瘍(慢性消化性潰瘍)中醫(yī)護理方案
- 護理工作質(zhì)量標準及考核細則
評論
0/150
提交評論