虛擬實(shí)驗(yàn)平臺(tái)的網(wǎng)絡(luò)化改進(jìn)方向教師管理模塊的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)論文_第1頁
虛擬實(shí)驗(yàn)平臺(tái)的網(wǎng)絡(luò)化改進(jìn)方向教師管理模塊的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)論文_第2頁
虛擬實(shí)驗(yàn)平臺(tái)的網(wǎng)絡(luò)化改進(jìn)方向教師管理模塊的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)論文_第3頁
虛擬實(shí)驗(yàn)平臺(tái)的網(wǎng)絡(luò)化改進(jìn)方向教師管理模塊的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)論文_第4頁
虛擬實(shí)驗(yàn)平臺(tái)的網(wǎng)絡(luò)化改進(jìn)方向教師管理模塊的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)論文_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、畢業(yè)設(shè)計(jì)(論文)虛擬實(shí)驗(yàn)平臺(tái)的網(wǎng)絡(luò)化改進(jìn)方向-教師管理模塊的設(shè)計(jì)與實(shí)現(xiàn)論文作者姓名:申請(qǐng)學(xué)位專業(yè):申請(qǐng)學(xué)位類別:指導(dǎo)教師姓名(職稱):論文提交日期:虛擬實(shí)驗(yàn)平臺(tái)的網(wǎng)絡(luò)化改進(jìn)方向-教師管理模塊的設(shè)計(jì)與實(shí)現(xiàn)摘 要為了實(shí)現(xiàn)課程實(shí)驗(yàn)教學(xué)的網(wǎng)絡(luò)化工程,網(wǎng)絡(luò)虛擬實(shí)驗(yàn)平臺(tái)已成為我們的迫切需求。這次畢業(yè)設(shè)計(jì)的目的主要是為了檢查使學(xué)生綜合運(yùn)用以前所學(xué)知識(shí)的能力,開發(fā)一個(gè)多功能的網(wǎng)絡(luò)虛擬實(shí)驗(yàn)臺(tái)軟件。教師管理模塊主要實(shí)現(xiàn)c/s模式系統(tǒng)的服務(wù)器管理功能,包括響應(yīng)客戶端的連接請(qǐng)求、用戶注冊(cè)、登陸、登陸通知、顯示在線用戶列表、用戶退出通知、對(duì)系統(tǒng)數(shù)據(jù)庫文件管理、服務(wù)器根據(jù)路由算法分配最佳節(jié)點(diǎn)給客戶端進(jìn)行p2p通信、客戶端

2、能隨時(shí)存取數(shù)據(jù)等。這次課題分為2個(gè)模塊:服務(wù)器模塊和客戶端模塊。其中客戶端模塊又包括了網(wǎng)絡(luò)模塊、數(shù)據(jù)分析模塊。服務(wù)器模塊分為網(wǎng)絡(luò)模塊、數(shù)據(jù)庫接口模塊、數(shù)據(jù)分析模塊。網(wǎng)絡(luò)模塊負(fù)責(zé)提供最基本的數(shù)據(jù)傳輸功能,數(shù)據(jù)庫接口模塊負(fù)責(zé)提供對(duì)數(shù)據(jù)的查詢、添加、刪除功能,數(shù)據(jù)分析模塊解析接收到的數(shù)據(jù),并生成需要回復(fù)的信息。服務(wù)器的數(shù)據(jù)分析模塊還要根據(jù)客戶端應(yīng)用層的指令,生成與指令相應(yīng)的發(fā)送信息。網(wǎng)絡(luò)虛擬實(shí)驗(yàn)平臺(tái)可以更好的幫助學(xué)生掌握實(shí)驗(yàn)技巧。關(guān)鍵詞:虛擬實(shí)驗(yàn)平臺(tái);c/s模式;最佳節(jié)點(diǎn);p2p通信;路由算法the direction of improving the virtual experimental pl

3、atform network -the design and implement of teacher administration moduleabstractin order to realize network engineering for experiment teaching later, the virtual experiment platform has become our urgent demand. the purpose of the thesis is mainly to develop a multifunctional virtual experiment so

4、ftware for inspecting the students ability of comprehensive utilization of the knowledge. the teacher administration module mainly realizes the c/s pattern system server management function, including the response customer end connection request, the user registration ,lands, lands the notice, demon

5、strated the on-line user tabulates, the user withdrawal notice, to the system database file management, the server carries on the p2p correspondence, the customer end according to the route algorithm assignment best pitch point for the customer end can deposit and withdraw the data as necessary and

6、so on . the thesis is divided into 2 modules: server module and customer module. customer module includes the network module and the data analysis module. the server module is divided into the network module, the database interface module, and the data analysis module. the network module provides th

7、e basic data transmission function. the database interface module provides the functions to inquire, add, and delete data. while, the data analysis module analysis the received data, and produce the reply information. the server data analysis module also needs to produce the relative sending informa

8、tion with the instruction, according to the customer application instructions. the network virtual experiment platform can help student grasp the experiment skill in a better way.key words: virtual experiment platform; c/s mode; best pitch point; p2p technology; route algorithm目 錄論文總頁數(shù):26頁1 引 言12 概

9、述12.1 項(xiàng)目背景12.2 項(xiàng)目介紹12.2.1 虛擬實(shí)驗(yàn)平臺(tái)的網(wǎng)絡(luò)化12.2.2 項(xiàng)目設(shè)計(jì)思路22.2.3 項(xiàng)目功能簡圖32.3 項(xiàng)目要求32.3.1 工作任務(wù)及要求32.3.2 b/s與 c/s42.4 項(xiàng)目難點(diǎn)及解決方法42.4.1 ip處理問題42.4.2 client之間的通信問題42.4.3 服務(wù)器分配鄰居節(jié)點(diǎn)的問題43 項(xiàng)目模塊的劃分53.1 服務(wù)器端/客戶端數(shù)據(jù)傳輸過程簡圖53.2 網(wǎng)絡(luò)通信模塊53.3 數(shù)據(jù)接口模塊73.3.1 數(shù)據(jù)庫的建立73.3.2 數(shù)據(jù)庫連接控件ado介紹103.3.3 對(duì)數(shù)據(jù)庫操作實(shí)現(xiàn)123.4 數(shù)據(jù)分析模塊133.4.1 提供基本網(wǎng)絡(luò)事件處理功能類

10、ccommandprocessor133.4.2 提供其它應(yīng)用層功能類 ccrealcmdprocessor153.4.3 服務(wù)器如何分配最佳節(jié)點(diǎn)163.4.4 floyed算法實(shí)現(xiàn)174 測(cè)試程序效果演示204.1 程序效果演示說明204.2 注冊(cè)204.3 登陸214.4 顯示在線用戶214.5 退出及退出通知214.6 服務(wù)器記錄用戶狀態(tài)224.7 服務(wù)器退出通知所有在線用戶23結(jié) 論23參考文獻(xiàn)23致 謝25聲 明261 引 言近年來,隨著信息技術(shù)的發(fā)展,計(jì)算機(jī)的普及,網(wǎng)絡(luò)無疑為我們帶了更多的便利,所以一個(gè)好的系統(tǒng)必須要有網(wǎng)絡(luò)功能的支撐。并且由于系統(tǒng)中需要大量的數(shù)據(jù)交換,服務(wù)器的負(fù)擔(dān)很

11、重,所以我們通過p2p方式減輕服務(wù)器負(fù)擔(dān),然而nat限制了p2p的實(shí)現(xiàn),所以我們采用了udp實(shí)現(xiàn)p2p網(wǎng)絡(luò)穿越nat的技術(shù)。作為虛擬實(shí)驗(yàn)臺(tái)的網(wǎng)絡(luò)化改進(jìn)方向教師管理模塊, 主要分為服務(wù)端和客戶端兩個(gè)模塊。一、服務(wù)器端分為:網(wǎng)絡(luò)模塊、數(shù)據(jù)庫接口模塊、數(shù)據(jù)分析模塊(1)網(wǎng)絡(luò)模塊(dll);網(wǎng)絡(luò)模塊開發(fā)分兩步提供最基本的數(shù)據(jù)傳輸功能。提供可靠的數(shù)據(jù)傳輸功能。(2)數(shù)據(jù)庫接口模塊(dll)提供對(duì)數(shù)據(jù)的查詢、添加、刪除功能。(3)數(shù)據(jù)分析模塊(類)解析接收到的數(shù)據(jù),并生成需要回復(fù)的信息。二、客戶端分為:網(wǎng)絡(luò)模塊、數(shù)據(jù)分析模塊(1)網(wǎng)絡(luò)模塊(dll)和服務(wù)端完全一樣(2)數(shù)據(jù)分析模塊(類)解析接收到的數(shù)據(jù),

12、并生成需要回復(fù)的信息。根據(jù)客戶端應(yīng)用層的指令,生成與指令相應(yīng)的發(fā)送信息。2 概 述2.1 項(xiàng)目背景近年來既算機(jī)、網(wǎng)絡(luò)等信息技術(shù)在教育領(lǐng)域的廣泛應(yīng)用,虛擬實(shí)驗(yàn)正日益成為廣大教師的計(jì)算機(jī)輔助教學(xué)手段。虛擬實(shí)驗(yàn)平臺(tái)正是應(yīng)這個(gè)大需求而誕生。并且隨著信息技術(shù)的發(fā)展,網(wǎng)絡(luò)無疑為我們帶了更多的便利,因此一個(gè)好的系統(tǒng)必須要具有網(wǎng)絡(luò)功能,要完成這些功能,我們就需要采用c/s模式的網(wǎng)絡(luò)結(jié)構(gòu)。2.2 項(xiàng)目介紹2.2.1 虛擬實(shí)驗(yàn)平臺(tái)的網(wǎng)絡(luò)化計(jì)算機(jī)技術(shù)、大規(guī)模集成電路技術(shù)和通訊技術(shù)的飛速發(fā)展,為虛擬實(shí)驗(yàn)的發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。虛擬實(shí)驗(yàn)就是在通用計(jì)算機(jī)上加載相應(yīng)的軟件或硬件,使得使用者在操作這臺(tái)計(jì)算機(jī)時(shí),就像是在操作一

13、臺(tái)專用的傳統(tǒng)試驗(yàn)設(shè)備一樣。在虛擬實(shí)驗(yàn)系統(tǒng)中,軟件是整個(gè)系統(tǒng)的關(guān)鍵,任何使用者都可以通過軟件的相關(guān)設(shè)置來達(dá)到要實(shí)現(xiàn)實(shí)驗(yàn)的效果。虛擬實(shí)驗(yàn)就是利用外部輸入(如鼠標(biāo)的點(diǎn)擊、拖動(dòng)和鍵盤的敲擊等),將計(jì)算機(jī)上虛擬的各種儀器,按實(shí)驗(yàn)要求、過程,組裝成一個(gè)完整的實(shí)驗(yàn)環(huán)境,同時(shí)在這個(gè)環(huán)境中完成實(shí)驗(yàn)操作,包括實(shí)驗(yàn)器材的添加、實(shí)驗(yàn)條件的改變、數(shù)據(jù)采集以及實(shí)驗(yàn)結(jié)果的模擬、分析。它包含了虛擬仿真技術(shù)、計(jì)算機(jī)技術(shù)、實(shí)驗(yàn)技術(shù)、網(wǎng)絡(luò)技術(shù)與專業(yè)等多方面理論知識(shí)。實(shí)現(xiàn)虛擬實(shí)驗(yàn)平臺(tái)具有網(wǎng)絡(luò)基本功能,實(shí)現(xiàn)虛擬實(shí)驗(yàn)平臺(tái)具有網(wǎng)絡(luò)基本功能,客戶機(jī)和主機(jī),客戶機(jī)和客戶機(jī)之間的即時(shí)通訊、文件的傳輸。由于采用了最新的p2p穿透nat的技術(shù),因此

14、可以實(shí)現(xiàn)沖破局域網(wǎng)的限制,實(shí)現(xiàn)真正的異地連接,同學(xué)可以在家里利用一臺(tái)普通的能夠上網(wǎng)的pc,就能把老師布置的實(shí)驗(yàn)作業(yè)完成,并且,老師可以通過服務(wù)器端,了解進(jìn)度情況,可以適時(shí)的指導(dǎo)其實(shí)驗(yàn),從而達(dá)到了更好的教學(xué)效果。2.2.2 項(xiàng)目設(shè)計(jì)思路我們開發(fā)的“微機(jī)接口虛擬實(shí)驗(yàn)平臺(tái)”采用“虛、實(shí)”結(jié)合的設(shè)計(jì)思路,強(qiáng)調(diào)實(shí)用性、效益性,最大限度地仿真真實(shí)的實(shí)驗(yàn)環(huán)境。該系統(tǒng)主要實(shí)現(xiàn)了“硬件實(shí)驗(yàn)臺(tái)”的虛擬化,將硬件實(shí)驗(yàn)臺(tái)“搬”到了微機(jī)的顯示屏幕上,構(gòu)建了“虛擬實(shí)驗(yàn)臺(tái)”,而原有在微機(jī)上的實(shí)驗(yàn)操作環(huán)境和方法仍然保持不變,這也是本系統(tǒng)的主要特點(diǎn)之一,從而實(shí)現(xiàn)了系統(tǒng)的開放性,保證了最大的“真實(shí)性”?!疤摂M實(shí)驗(yàn)臺(tái)”包含虛擬接口

15、電路和虛擬實(shí)驗(yàn)操作臺(tái)?!疤摂M接口電路”是實(shí)驗(yàn)程序和虛擬實(shí)驗(yàn)操作臺(tái)的連接通道,包含了實(shí)驗(yàn)中常用的i/o接口芯片,有8253、8255、a/d、d/a等,具有與實(shí)際芯片相同的功能,并與實(shí)際的微機(jī)實(shí)現(xiàn)了“連接”,能夠被實(shí)際的實(shí)驗(yàn)程序所訪問,同時(shí)又能與虛擬實(shí)驗(yàn)操作臺(tái)相聯(lián)系。“虛擬實(shí)驗(yàn)操作臺(tái)”主要包括常用的外圍單元電路,如指示燈、數(shù)碼管、鍵盤、開關(guān)傳感器等,它是一個(gè)交互性較強(qiáng)的可視化界面,不僅可以指示或反映出實(shí)驗(yàn)的結(jié)果,同時(shí)學(xué)生可以通過鼠標(biāo)來進(jìn)行模擬的連線、操作和使用虛擬的測(cè)試儀器進(jìn)行檢測(cè)等。虛擬實(shí)驗(yàn)操作臺(tái)的設(shè)計(jì)主要通過多媒體技術(shù)和語言編程來實(shí)現(xiàn),一方面要注重界面的逼真,另一方面還要注重模擬實(shí)驗(yàn)操作的靈

16、活性和開放性2.2.3 項(xiàng)目功能簡圖虛擬實(shí)驗(yàn)平臺(tái)的網(wǎng)絡(luò)化改進(jìn)方向dll動(dòng)態(tài)升級(jí)模塊實(shí)驗(yàn)電路圖管理模塊遠(yuǎn)程協(xié)助模塊教師管理模塊學(xué)生信息管理系統(tǒng)數(shù)據(jù)庫的管理在線用戶列表服務(wù)器分配最佳節(jié)點(diǎn)p2p通信模塊圖1 項(xiàng)目功能簡圖2.3 項(xiàng)目要求2.3.1 工作任務(wù)及要求(1) 本畢業(yè)設(shè)計(jì)的主要任務(wù):綜合運(yùn)用以前所學(xué)的專業(yè)知識(shí),設(shè)計(jì)開發(fā)一個(gè)多功能虛擬實(shí)驗(yàn)平臺(tái)軟件教師管理模塊。實(shí)現(xiàn)虛擬實(shí)驗(yàn)平臺(tái)具有網(wǎng)絡(luò)基本功能,打破各種局域網(wǎng)不能互訪的問題,客戶機(jī)和主機(jī),客戶機(jī)和客戶機(jī)之間的即時(shí)通訊、數(shù)據(jù)的傳輸。本模塊設(shè)計(jì)要求實(shí)現(xiàn)部分功能響應(yīng)客戶端的連接請(qǐng)求、分配最佳相鄰節(jié)點(diǎn)給客戶端進(jìn)行p2p通信、客戶端能隨時(shí)存取數(shù)據(jù)等;能實(shí)現(xiàn)

17、教師對(duì)學(xué)生列表的添加與管理,添加時(shí)能進(jìn)行身份驗(yàn)證;能實(shí)現(xiàn)相關(guān)個(gè)人的設(shè)置(比如名稱及口令的更改等)。(2) 本畢業(yè)設(shè)計(jì)的相關(guān)要求: 本系統(tǒng)的開發(fā)要求采用c/s結(jié)構(gòu),選用所熟悉的開發(fā)工具及開發(fā)環(huán)境visual c+ 6.0進(jìn)行本系統(tǒng)的設(shè)計(jì)與開發(fā)。 本畢業(yè)設(shè)計(jì)要求提供能實(shí)現(xiàn)文件傳輸?shù)裙δ艿能浖?,要求軟件具有操作簡便、界面友好等特性;同時(shí),還要求與另四位同學(xué)所設(shè)計(jì)與實(shí)現(xiàn)的“教師遠(yuǎn)程協(xié)助”“遠(yuǎn)程指導(dǎo)演示”“動(dòng)態(tài)升級(jí)”“vlp2p通信邏輯”集成在一起,形成一個(gè)真正實(shí)用的、功能完善的虛擬實(shí)驗(yàn)臺(tái)軟件。 提交本次畢業(yè)設(shè)計(jì)的畢業(yè)論文。在畢業(yè)論文中應(yīng)詳細(xì)說明所設(shè)計(jì)與實(shí)現(xiàn)的系統(tǒng)的設(shè)計(jì)流程;寫作中應(yīng)嚴(yán)格按照“成都信息工

18、程學(xué)院本科畢業(yè)論文(設(shè)計(jì))內(nèi)容及格式的規(guī)范化要求”進(jìn)行寫作。2.3.2 b/s與 c/s 目前的軟件系統(tǒng)體系結(jié)構(gòu)一般分為兩種形式,一種為大家所熟識(shí)的c/s 結(jié)構(gòu),另一種為b/s結(jié)構(gòu)。c/s結(jié)構(gòu),即client/server(客戶端/服務(wù)器)結(jié)構(gòu),通過將任務(wù)合理分配到client 端和server 端,降低了系統(tǒng)的通訊開銷,可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì)。b/s結(jié)構(gòu),即browse /server(瀏覽器/服務(wù)器)結(jié)構(gòu),就是只安裝維護(hù)一個(gè)服務(wù)器,而客戶端采用瀏覽器運(yùn)行軟件,進(jìn)行瀏覽、訪問、操作數(shù)據(jù)。最初的管理信息系統(tǒng)基本上是采用c/s 模式開發(fā)的。傳統(tǒng)的c/s體系結(jié)構(gòu)雖然采用的是開放模式,但這只

19、是系統(tǒng)開發(fā)一級(jí)的開放性,在特定的應(yīng)用中無論是client端還是server端都還需要特定的軟件支持。由于沒能提供用戶真正期望的開放環(huán)境,c/s結(jié)構(gòu)的軟件需要針對(duì)不同的操作系統(tǒng)系統(tǒng)開發(fā)不同版本的軟件,加之產(chǎn)品的更新?lián)Q代十分快,已經(jīng)很難適應(yīng)百臺(tái)電腦以上局域網(wǎng)用戶同時(shí)使用。而且代價(jià)高,效率低。但隨著www的廣泛應(yīng)用,目前的管理信息系統(tǒng)已經(jīng)逐漸開始從c/s模式向?yàn)g覽器/服務(wù)器b/s模式轉(zhuǎn)變。b/s 結(jié)構(gòu)的軟件所有的維護(hù)、升級(jí)工作都只在服務(wù)器上進(jìn)行,而客戶端能立刻獲得最新版本的軟件。2.4 項(xiàng)目難點(diǎn)及解決方法2.4.1 ip處理問題由于涉及到各種局域網(wǎng),因此需要處理各種私有ip的訪問問題。解決方法:采用

20、nat技術(shù)實(shí)現(xiàn)私有地址轉(zhuǎn)換成公共有效的地址。2.4.2 client之間的通信問題解決方法:利用服務(wù)器的打洞原理,假設(shè)有server、client a、client b,如果client a想向client b發(fā)送信息,那么client a發(fā)送命令給server s,請(qǐng)求server命令client b向client a方向打洞。然后client a就可以通過client b的外網(wǎng)地址與client b通信了。2.4.3 服務(wù)器分配鄰居節(jié)點(diǎn)的問題解決方法: 服務(wù)器在接受到client a的請(qǐng)求信息后,根據(jù)最佳路由算法的思想找到client a要求連接的相鄰節(jié)點(diǎn)。把它們記錄到服務(wù)器數(shù)據(jù)庫中。cl

21、ient a根據(jù)接受到服務(wù)器給它返回的相鄰節(jié)點(diǎn)信息,與相近的客戶端進(jìn)行下載、遠(yuǎn)程協(xié)助、動(dòng)態(tài)升級(jí)等一些功能。當(dāng)服務(wù)端再接受到來自不同客戶端請(qǐng)求信息時(shí),先在數(shù)據(jù)庫路由信息表里面查找是否有類似的請(qǐng)求記錄。如果有,服務(wù)器將根據(jù)路由表以往的記錄返還給客戶端。如果沒有,服務(wù)器端會(huì)根據(jù)最佳路由算法的思想找到需要的節(jié)點(diǎn)信息,保存到數(shù)據(jù)庫并且返還給請(qǐng)求的客戶端。這種機(jī)制可以保證系統(tǒng)網(wǎng)絡(luò)通信具體有高效率性、可靠性。3 項(xiàng)目模塊的劃分3.1 服務(wù)器端/客戶端數(shù)據(jù)傳輸過程簡圖圖2 服務(wù)器端/客戶端數(shù)據(jù)傳輸過程簡圖3.2 網(wǎng)絡(luò)通信模塊網(wǎng)絡(luò)通信模塊主要是基于另外一個(gè)同學(xué)做的p2p網(wǎng)絡(luò)通信模塊,調(diào)用其底層函數(shù)實(shí)現(xiàn)網(wǎng)絡(luò)功能。

22、由于前期調(diào)試需要,使用了一個(gè)類似網(wǎng)絡(luò)通信模塊netinterface。此模塊采用udp協(xié)議。netinterface接口dll說明:(1) 通過event_begin_read對(duì)應(yīng)的事件來確定有數(shù)據(jù)到來。(2) 讀取數(shù)據(jù)線程被該事件激活,激活后馬上將這個(gè)事件復(fù)位;讀取完數(shù)據(jù),再次查看事件,如有數(shù)據(jù)。(3) 讀取數(shù)據(jù)線程將讀到的數(shù)據(jù)放到緩沖區(qū)中之后,激活數(shù)據(jù)分析線程,并立即讀取下一個(gè)數(shù)據(jù)(4) 數(shù)據(jù)分析線程將不合法的數(shù)據(jù)扔掉。遇到合法的數(shù)據(jù),即通過消息通知應(yīng)用層。(5) 給應(yīng)用層的接口: 設(shè)置函數(shù)體:void setnetinterfaceinfo(hwnd hwnd,cstring ip,ui

23、nt port,uint message)作 用:設(shè)置通迅模塊參 數(shù):hwnd:主程序窗口port:使用的端口,對(duì)于服務(wù)器端,為要使用的端口號(hào),對(duì)于客戶端,為0 統(tǒng)會(huì)自動(dòng)分配一個(gè)端口給客戶端)message:當(dāng)通迅模塊接收到數(shù)據(jù)時(shí),向主程序發(fā)送此消息返回值:此函數(shù)無返回值。 打開服務(wù)函數(shù)體:bool startserver()作 用:打開通迅模塊的通迅功能參 數(shù):此函數(shù)無參數(shù)返回值:打開成功,返回true,否則false 關(guān)閉服務(wù)函數(shù)體:bool stopserver()作 用:關(guān)閉通迅模塊的通迅功能參 數(shù):此函數(shù)無參數(shù)返回值:關(guān)閉成功,返回true,否則false 讀取數(shù)據(jù)函數(shù)體:int r

24、eaddata(int &nordergroup, int &norder, char szdata, int &len, cstring &ip, uint &port)作 用:通迅模塊接收到的數(shù)據(jù)會(huì)放在接收緩沖區(qū)中,該函數(shù)首先檢查接收緩沖是否為空,如空,則返回0;否則,每次讀取緩沖區(qū)中的一個(gè)節(jié)點(diǎn),讀取完就將此節(jié)點(diǎn)移到緩沖區(qū)的尾部。參 數(shù):nordergroup:命令分組號(hào)norder:命令號(hào)szdata:接收數(shù)據(jù)緩沖區(qū)len:輸入時(shí)為szdata的長度,輸出時(shí)為接收到數(shù)據(jù)的長度ip:發(fā)送方的ip地址port:發(fā)送方的端口號(hào)返回值:讀取到數(shù)據(jù),返回true,沒有讀取到數(shù)據(jù)(緩沖區(qū)已經(jīng)為空),

25、返回為false 發(fā)送數(shù)據(jù)函數(shù)體:void senddata(int nordergroup,int norder,char szdata, int len, cstring ip, uint port)作 用:將發(fā)送數(shù)據(jù)放到發(fā)送緩沖區(qū)中。然后判斷dll中發(fā)送過線程是否啟動(dòng),如未啟動(dòng),就啟動(dòng)它,否則直接返回。參 數(shù):nordergroup:命令分組號(hào)norder:命令號(hào)szdata:發(fā)送的數(shù)據(jù)nlen:發(fā)送數(shù)據(jù)的長度ip:接收方的ip地址port:接收方的端口號(hào)返回值:無3.3 數(shù)據(jù)接口模塊3.3.1 數(shù)據(jù)庫的建立數(shù)據(jù)庫可分為7個(gè)表,它們分別是experiment(實(shí)驗(yàn)信息表)、rout(路由

26、節(jié)點(diǎn)表)、score(學(xué)生實(shí)驗(yàn)成績表)、students(學(xué)生信息表)、teacher(教師信息表)、user(用戶表)、onlinuser(在線用戶表)。下面介紹一下各個(gè)表的具體內(nèi)容:(1)experiment(實(shí)驗(yàn)信息表)包括exp_id(實(shí)驗(yàn)號(hào))、exp_name(實(shí)驗(yàn)名)、 describe(實(shí)驗(yàn)描述)、filenmae(實(shí)驗(yàn)電路圖文件名)。表1 實(shí)驗(yàn)信息表experiment序號(hào)字段中文名稱字段英文名稱數(shù)據(jù)類型pknull備注1.實(shí)驗(yàn)號(hào)exp_idint(4)yesno實(shí)驗(yàn)編號(hào)2.實(shí)驗(yàn)名exp_namevarchar(40)no實(shí)驗(yàn)名稱3.實(shí)驗(yàn)描述describevarchar(40

27、)no實(shí)驗(yàn)信息的相關(guān)描述4.實(shí)驗(yàn)電路圖文件名filenmaevarchar(20)no實(shí)驗(yàn)電路圖文本文件(2)rout(路由節(jié)點(diǎn)表)包括user_id(用戶號(hào))、rout_id(路由號(hào))、rout_ip(路由ip)、rout_itime(路由延時(shí))。表2 路由節(jié)點(diǎn)表 rout序號(hào)字段中文名稱字段英文名稱數(shù)據(jù)類型pknull備注1用戶號(hào)user_idint(4)yesno用戶編號(hào)2路由號(hào)rout_idint(4)no路由編號(hào)3路由iprout_ipvatchar(20)no用一個(gè)字符串來存放ipv4地址4路由延時(shí)rout_timeint(4)no經(jīng)過次路由時(shí)需要的時(shí)間(3)score(學(xué)生實(shí)驗(yàn)成

28、績表)包括exp_id(實(shí)驗(yàn)號(hào)) 、stu_id(學(xué)生號(hào))、teache(教師號(hào))、score(學(xué)生成績)。表3 學(xué)生實(shí)驗(yàn)成績表score序號(hào)字段中文名稱字段英文名稱數(shù)據(jù)類型pknull備注1實(shí)驗(yàn)號(hào)exp_idint(4)yesno實(shí)驗(yàn)編號(hào)2學(xué)生號(hào)stu_idint(4)no學(xué)生編號(hào)3教師號(hào)teacher_idint(4)no教師編號(hào)4學(xué)生成績scoreint(4)no(4)students(學(xué)生信息表)包括stu_id(學(xué)生號(hào))、stu_name(學(xué)生姓名)、sex(性別)、department(系別)、class(班級(jí))。表4 學(xué)生信息表student序號(hào)字段中文名稱字段英文名稱數(shù)據(jù)類型p

29、knull備注1學(xué)生號(hào)stu_idint(4)yesno學(xué)生編號(hào)2學(xué)生姓名stu_namevarchar(50)no學(xué)生真實(shí)姓名3性別sexvarchar(50)no4系別departmentvarchar(50)no包括學(xué)生專業(yè)5班級(jí)classvarchar(50)no(5)teacher(教師信息表)包括 teacher_id(教師號(hào))、exp_id(實(shí)驗(yàn)號(hào))、 teacher_name(教師姓名)。表5 教師信息表 teacher序號(hào)字段中文名稱字段英文名稱數(shù)據(jù)類型pknull備注1教師號(hào)teacher_idint(4)no教師的唯一標(biāo)識(shí)2實(shí)驗(yàn)號(hào)exp_idint(4)yesno實(shí)驗(yàn)編號(hào)

30、3教師姓名姓名teacher_namevarchar(50)no教師真實(shí)姓名(6)user(用戶表)包括username(用戶名)、pwd(密碼)、user_type(用戶類型)、user_id(用戶號(hào))表6 用戶信息表user序號(hào)字段中文名稱字段英文名稱數(shù)據(jù)類型pknull備注1用戶名usernamevarchar(50)no用戶名為學(xué)生學(xué)號(hào)或教師名字拼音2 密碼pwdvarchar(50)3用戶類型user_typectinyint(1)no學(xué)生/教師4用戶號(hào)user_idint(4)yesno用戶編號(hào)(7)onlinuser(在線用戶表)包括user_id(用戶號(hào))、username(用

31、戶名) 、user_type(用戶類型) 表7 在線用戶表onlinuser序號(hào)字段中文名稱字段英文名稱數(shù)據(jù)類型pknull備注1用戶名usernamevarchar(50)no用戶名為學(xué)生學(xué)號(hào)或教師名字拼音2用戶號(hào)user_idint(4)yesno用戶編號(hào)3用戶類型user_typectinyint(1)no學(xué)生/教師3.3.2 數(shù)據(jù)庫連接控件ado介紹ado是activex數(shù)據(jù)對(duì)象(activex data object),這是microsoft開發(fā)數(shù)據(jù)庫應(yīng)用程序的面向?qū)ο蟮男陆涌凇do訪問數(shù)據(jù)庫是通過訪問ole db數(shù)據(jù)提供程序來進(jìn)行的,提供了一種對(duì)ole db數(shù)據(jù)提供程序的簡單高層

32、訪問接口。ado技術(shù)簡化了ole db的操作,ole db的程序中使用了大量的com接口,而ado封裝了這些接口。所以,ado是一種高層的訪問技術(shù)。ado技術(shù)基于通用對(duì)象模型(com),它提供了多種語言的訪問技術(shù),同時(shí),由于ado提供了訪問自動(dòng)化接口,所以,ado可以用描述的腳本語言來訪問vbscript,vcscript等。在vc中可以使用vc6提供的activex控件開發(fā)應(yīng)用程序,還可以用ado對(duì)象開發(fā)應(yīng)用程序。使用ado對(duì)象開發(fā)應(yīng)用程序可以使程序開發(fā)者更容易地控制對(duì)數(shù)據(jù)庫的訪問,從而產(chǎn)生符合用戶需求的數(shù)據(jù)庫訪問程序。使用ado對(duì)象開發(fā)應(yīng)用程序也類似其它技術(shù),需產(chǎn)生與數(shù)據(jù)源的連接,創(chuàng)建記錄

33、等步驟,但與其它訪問技術(shù)不同的是,ado技術(shù)對(duì)對(duì)象之間的層次和順序關(guān)系要求不是太嚴(yán)格。在程序開發(fā)過程中,不必選建立連接,然后才能產(chǎn)生記錄對(duì)象等。可以在使用記錄的地方直接使用記錄對(duì)象,在創(chuàng)建記錄對(duì)象的同時(shí),程序自動(dòng)建立了與數(shù)據(jù)源的連接。這種模型有力的簡化了程序設(shè)計(jì),增強(qiáng)了程序的靈活性。以下利用ado控件類adoconn的主要函數(shù)實(shí)現(xiàn):void adoconn:oninitadoconn(cstring m_ip) / 初始化連接數(shù)據(jù)庫/ 初始化ole/com庫環(huán)境 coinitialize(null);try/ 創(chuàng)建connection對(duì)象m_pconnection.createinstance

34、(adodb.connection);/ 設(shè)置連接字符串,必須是bstr型或者_(dá)bstr_t類型 _bstr_t strconnect=provider=sqloledb;server=+m_ip+ ;database=sy;uid=sa;pwd=985723; m_pconnection-open(strconnect,admodeunknown);/ 捕捉異常catch(_com_error e)/ 顯示錯(cuò)誤信息afxmessagebox(e.description();/ 執(zhí)行查詢_recordsetptr& adoconn:getrecordset(_bstr_t bstrsql) t

35、ry/ 連接數(shù)據(jù)庫,如果connection對(duì)象為空,則重新連接數(shù)據(jù)庫if(m_pconnection=null)oninitadoconn();/ 創(chuàng)建記錄集對(duì)象m_precordset.createinstance(_uuidof(recordset);/ 取得表中的記錄m_precordset-open(bstrsql,m_pconnection.getinterfaceptr(),adopendynamic,adlockoptimistic,adcmdtext);/ 捕捉異常catch(_com_error e) / 顯示錯(cuò)誤信息afxmessagebox(e.description(

36、);/ 返回記錄集return m_precordset;/ 執(zhí)行sql語句,insert update _variant_tbool adoconn:executesql(_bstr_t bstrsql) try/ 是否已經(jīng)連接數(shù)據(jù)庫if(m_pconnection = null)oninitadoconn();/ connection對(duì)象的execute方法:(_bstr_t commandtext, / variant * recordsaffected, long options ) / 其中commandtext是命令字串,通常是sql命令。/ 參數(shù)recordsaffected是操

37、作完成后所影響的行數(shù), / 參數(shù)options表示commandtext的類型:adcmdtext-文本命令;adcmdtable-表名/ adcmdproc-存儲(chǔ)過程;adcmdunknown-未知m_pconnection-execute(bstrsql,null,adcmdtext);return true;catch(_com_error e) afxmessagebox(e.description();return false;void adoconn:exitconnect()/ 關(guān)閉記錄集和連接if (m_precordset != null)m_precordset-close

38、();m_pconnection-close();/ 釋放環(huán)境:couninitialize();3.3.3 對(duì)數(shù)據(jù)庫操作實(shí)現(xiàn)與數(shù)據(jù)庫連接主要是通過cdatabaseinterface類調(diào)用ado控件類的函數(shù)來實(shí)現(xiàn)其中主要的操作函數(shù)包括以下: 注冊(cè)處理:register(cstring password, ulong &id, cstring &name) 登陸處理:login(cstring password, ulong id, cstring &name) 得到用戶id:getuserbyid(ulong id,lpuser &puser,position &position) 驗(yàn)證用戶

39、密碼:bool cdatabaseinterface:chkuser(int id, cstring pwd)3.4 數(shù)據(jù)分析模塊3.4.1 提供基本網(wǎng)絡(luò)事件處理功能類ccommandprocessor class ccommandprocessor public:ccommandprocessor();virtual ccommandprocessor();public:ulong m_my_id;cstring m_my_name;data readdata;data senddata;cstring m_strlogmessage;/服務(wù)器ip和portcstring server_ip

40、;clistbox *m_plist;public:bool compose_send_cmd_quit();void compose_send_cmd_login(ulong id,cstring password);void compose_send_cmd_register(cstring password);void dataanalysis();protected:void net_event_server_quit();void net_event_error();int getuserfromuserlistbyid(ulong id);void net_event_login_

41、user();void net_event_login_notify();void net_event_quit_notify();void net_event_login();void net_event_register();void onnetevent();protected:void extractlongtochar(char szdata4,ulong ldata);void putchartolong(char szdata4,ulong&ldata);protected:virtual void onchatevent()=0;基類提供基本的網(wǎng)絡(luò)事件處理功能:(1) 注冊(cè)(2

42、) 登陸登陸包括: 登陸 登陸通知 登陸返回信息(3) 通出通出包括: 退出 退出通知這些功能的基本格式如下:enum tagcmdgroupcmd_group_net_event,/基本網(wǎng)絡(luò)命令組 cmd_group_trans_event /實(shí)驗(yàn)信息傳輸命令組;/命令號(hào)定義及命令格式enum tagcmd_net_event/passwordn/head+n+passwordcmd_net_event_register, /注冊(cè)/id4+passwordncmd_net_event_login, /登陸/id4+passwordncmd_net_event_login_notify,/登陸

43、通知/id4+passwordncmd_net_event_login_user,/登陸返回其它相關(guān)用戶信息/id4cmd_net_event_quit,/退出/id4cmd_net_event_quit_notify,/退出通知(通知其它相關(guān)用戶這個(gè)退出信息)/id4cmd_net_event_timeout,/發(fā)生錯(cuò)誤:錯(cuò)誤內(nèi)容ncmd_net_event_error,/發(fā)生網(wǎng)絡(luò)基本事件錯(cuò)誤時(shí),返回錯(cuò)誤信息內(nèi)容/無數(shù)據(jù)內(nèi)容cmd_net_event_server_quit/服務(wù)器關(guān)掉了,通知所有在線用戶;enum tagcmd_trans_event /發(fā)送方id4+接收方id4+信息內(nèi)容

44、cmd_trans_event_trans/實(shí)驗(yàn)信息傳輸命令;3.4.2 提供其它應(yīng)用層功能類 ccrealcmdprocessor 子類提供其它應(yīng)用層功能,例如實(shí)驗(yàn)文件傳輸?shù)?。每一?xiàng)功能,都需要在基類中加入一個(gè)相應(yīng)的虛函數(shù),這個(gè)虛函數(shù)由子類重載,填入代碼。class crealcmdprocessor : public ccommandprocessor public:crealcmdprocessor();virtual crealcmdprocessor();public:bool compose_send_cmd_trans(cstring content);private:void

45、transevent_trans(); /虛函數(shù)申明virtual void ontranstevent(); ;3.4.3 服務(wù)器如何分配最佳節(jié)點(diǎn)假設(shè)系統(tǒng)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)入下圖:服務(wù)器路由器1路由器2路由器3客戶a客戶b客戶c路由器43426532263圖3 模擬網(wǎng)絡(luò)拓?fù)鋱D假設(shè)有3個(gè)客戶端a、b、c分別處在3個(gè)不同的局域網(wǎng)中,網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如圖3所示。其中線上的數(shù)字表示通信時(shí)延。為簡化模型,這里我們不考慮通信時(shí)延的方向性。假設(shè)客戶端a向服務(wù)器發(fā)出下載一個(gè)實(shí)驗(yàn)電路圖及相應(yīng)的器件dll的請(qǐng)求信息,這類請(qǐng)求很耗服務(wù)器資源。如果客戶端b和c也有a需要的實(shí)驗(yàn)電路圖及相應(yīng)的器件dll的話,為了減輕服務(wù)器的負(fù)

46、擔(dān),此時(shí)可以不由服務(wù)器直接向a提供相關(guān)信息,而由其他客戶端(例如b或c)通過p2p通信的方式來滿足a的需求。對(duì)a來說,與a通信效率最高的其他客戶端是最佳選擇。如圖3所示的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),我們可以直觀看出,客戶端b和c都可與a通信,但b與a通信的延時(shí)更小。如何實(shí)現(xiàn)讓b來與a通信呢?首先是如何選出b? 要選出b,先要知道整個(gè)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)。作為客戶端, a自身不便于得到整個(gè)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),但服務(wù)器可以得到網(wǎng)絡(luò)結(jié)構(gòu)。所以,可以由服務(wù)器來執(zhí)行挑選。服務(wù)器用什么算法來實(shí)現(xiàn)挑選?我們可以把網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖看成一個(gè)帶權(quán)值的無向圖(簡化模型是無向圖),問題就變成在無向圖中找出兩個(gè)頂點(diǎn)之間的最短權(quán)值路徑。結(jié)合我們的

47、應(yīng)用,最后選擇了floyed算法。在3.4.4節(jié)中有介紹此算法的原理以及實(shí)現(xiàn)。服務(wù)器獲取網(wǎng)絡(luò)拓?fù)涞乃悸肥牵合茸尶蛻舳送ㄟ^tracert命令聯(lián)接服務(wù)器,得到該客戶端到達(dá)服務(wù)器所要經(jīng)過的各路由器節(jié)點(diǎn)以及每到一站需要的時(shí)間等一些信息。然后客戶端將其路由信息傳給服務(wù)器,服務(wù)器將各客戶端的這些路由信息保存到數(shù)據(jù)庫中,從而可以得到各客戶端與服務(wù)器之間的大體網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。這將作為floyed算法的必要的輸入信息3.4.4 floyed算法實(shí)現(xiàn)路由算法的數(shù)學(xué)模型是圖論模型.路由過程的選擇,即是在加權(quán)無向圖(或有向圖)中尋找源結(jié)點(diǎn)與目標(biāo)結(jié)點(diǎn)的最佳路徑,根據(jù)最佳路徑選擇下一站路由器。要用到floyed算法必須要從

48、圖的鄰接矩陣表示法說起:在圖的鄰接矩陣表示法中: 用鄰接矩陣表示頂點(diǎn)間的相鄰關(guān)系; 用一個(gè)順序表來存儲(chǔ)頂點(diǎn)信息;圖的鄰接矩陣(adacency matrix):設(shè)g=(v,e)是具有n個(gè)頂點(diǎn)的圖,則g的鄰接矩陣是具有如下性質(zhì)的n階方陣:ai,j=1(當(dāng)v(i,j)或v是e(g)中的邊)ai,j=0 (當(dāng)v(i,j)或v不是e(g)中的邊)按照上面的虛擬網(wǎng)絡(luò)拓?fù)鋱D(圖3)轉(zhuǎn)換成下面的無向圖:v1v2v3v4v5v6v7v83432526263圖4 模擬鄰接矩陣圖根據(jù)圖4,服務(wù)器會(huì)根據(jù)圖的鄰接矩陣表示法得到下面的矩陣:0 3 2 4 0 0 0 03 0 5 0 2 0 0 02 5 0 6 3

49、0 0 0a= 4 0 6 0 0 0 0 6 0 2 3 0 0 3 2 00 0 0 0 3 0 0 00 0 0 0 2 0 0 00 0 0 6 0 0 0 0其中服務(wù)器將整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)將服務(wù)器、路由器1,2,3、客戶端a,b,c分別編號(hào)為:v1,v2,v3,v4,v5,v6,v7,v8。鄰接矩陣可定義為:ai,j=w(i,j) (邊上的權(quán)值是延時(shí)單位是毫秒)ai,j=0 (兩點(diǎn)之間不能直接通信) floyed算法從圖的鄰接矩陣開始,按照?qǐng)D結(jié)點(diǎn)0,1,2,n-1的順序,分別以每個(gè)結(jié)點(diǎn)k(0=k=n-1)作為新考慮的中間點(diǎn),在第k-1次運(yùn)算得到的a (k-1) ( a (-1)為圖的鄰接矩

50、陣ga)的基礎(chǔ)上,求出每對(duì)結(jié)點(diǎn)ij的目前最短路徑長度a (k)ij。計(jì)算公式為:a(k)ij=min(a(k-1)ij,a(k-1)ik + a(k-1)kj),(0= i=n-1,0= j =n-1)。當(dāng)i結(jié)點(diǎn)是源結(jié)點(diǎn),j結(jié)點(diǎn)是目標(biāo)結(jié)點(diǎn),而且i結(jié)點(diǎn)與k結(jié)點(diǎn)是相鄰的時(shí)候,k結(jié)點(diǎn)就是目前最短路徑中i結(jié)點(diǎn)的下一站路由器。當(dāng)k從0取到n-1的時(shí)候,矩陣a(n-1) 就是最后得到的結(jié)果-最短路徑的矩陣,而同時(shí)按照上述方法跟蹤就可以得到最優(yōu)路由表。 原理如上所述,floyed路由算法設(shè)計(jì)如下:routnum是路由器數(shù)目,netarray routnum routnum 是存儲(chǔ)網(wǎng)絡(luò)拓?fù)湫畔⒌木仃嚕瑅ala

51、rray routnum routnum 是網(wǎng)絡(luò)耗散信息的矩陣。.from是源路由器,routtable routnum 2 是待返回的路由表。matrix routnum routnum 是存儲(chǔ)源路由器到其它路由器的最短距離的矩陣。int bval = true;int i , j ,k;for (i=0 ;i routnum-1 ;i+)for (j=0 ; j routnum-1 ; j +) matrixij = valarrayij; for (i=0 ; i routnum-1;i +) /路由表初始化routtable i0=-1;routtable i1=-1;while(tr

52、ue)for (k=0 ; kroutnum-1;k+)for (i=0 ; iroutnum-1;i+)for (j=0 ; j=(matrixik + matrixkj) /計(jì)算目前最短路徑長度a(k)ijmatrixij = matrixik + matrixkj;if(i=from & netarrayik=1) /計(jì)算目前最短長度下路由表if( i!=k | k=j )routtable j0 = j;routtable j1 = k; / end of if / end of forfor (i=0 ; iroutnum-1 ;i+) bval=bval & ( routtable i0!=-1) & (routtablei1!=-1); if( bval )break;else bval =true; / end of wh

溫馨提示

  • 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)論