版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 畢 業(yè) 設(shè) 計(論 文)</p><p> 設(shè)計(論文)題目:基于移動設(shè)備的主機管理系統(tǒng)的設(shè)計 </p><p> 學(xué) 院 名 稱: xxx </p><p> 專 業(yè): xxx </p><p> 班
2、 級: xxx </p><p> 姓 名: xxx 學(xué) 號 xxx </p><p> 指 導(dǎo) 教 師: xxx 職 稱 xxx </p><p> 企 業(yè) 教 師: xxx 企 業(yè)
3、 </p><p> 定稿日期: 2014 年 5 月 6 日</p><p> 基于移動設(shè)備的主機管理系統(tǒng)的設(shè)計</p><p><b> 摘 要 </b></p><p> 本系統(tǒng)是一個基于ARM開發(fā)板的移動的服務(wù)器,支持有線模式或者WIFI模式進行收發(fā)數(shù)據(jù)。用來接收PC機發(fā)來的相關(guān)運行
4、信息,實現(xiàn)遠程監(jiān)測控制主機的運行狀態(tài)。在PC機上運行一個客戶端,用于采集本PC機相關(guān)運行數(shù)據(jù),如定期采集CPU的使用率,定期采集內(nèi)存的狀態(tài),采集磁盤信息,監(jiān)控當(dāng)前系統(tǒng)中運行的進程的狀態(tài),需要監(jiān)控的進程的列表也是從配置文件中讀取,網(wǎng)絡(luò)流量監(jiān)控,采集時的重要數(shù)據(jù)記錄本地日志,提供用戶日后查看,然后發(fā)送給服務(wù)器,服務(wù)器會進行數(shù)據(jù)分析,越高警戒值,會反饋給用戶,用戶可以通過服務(wù)器按鍵發(fā)送相關(guān)指令,控制PC機的運行,比如關(guān)閉某個進程,重啟PC機,
5、關(guān)閉PC機等操作。</p><p> 關(guān)鍵詞:服務(wù)器,PC機,移動監(jiān)控</p><p> MOBILE HOST EQUIPMENT MANAGEMENT</p><p> SYSTEM BASED ON ARM BOARD</p><p><b> ABSTRACT</b></p><p&g
6、t; This system is a server based on the movement of the ARM development board, support model of cable or WIFI to send and receive data. To receives the PC of the relevant information, remote control of the host running
7、state. In PC running a client for this PC related operation data, such as regular collection CPU usage, regularly collecting memory state, disk information, monitoring the current system in the state of the running proce
8、ss, need to monitor the progress of the list is read from the co</p><p> Key Words: servers, pc, mobile monitoring</p><p><b> 目錄</b></p><p><b> 摘 要I</b>&
9、lt;/p><p> ABSTRACTII</p><p><b> 第1章緒論1</b></p><p><b> 1.1引言1</b></p><p> 1.2移動主機管理系統(tǒng)設(shè)計的背景1</p><p> 1.3本設(shè)計所以實現(xiàn)的目標2</p
10、><p> 1.4論文的結(jié)構(gòu)安排2</p><p> 第2章主機系統(tǒng)設(shè)計軟件壞境介紹3</p><p> 2.1Notepad++文本編輯器3</p><p> 2.2GCC編輯器4</p><p> 2.3GDB調(diào)試器4</p><p> 第3章主機管理系統(tǒng)整體設(shè)
11、計5</p><p> 3.1 整體設(shè)計概念設(shè)計圖5</p><p> 3.2 軟件工作流程圖5</p><p> 3.2.1 主機工作流程圖5</p><p> 3.2.2 監(jiān)控端工作流程圖7</p><p> 第4章主機管理系統(tǒng)模塊實現(xiàn)8</p><p> 4.1
12、日志記錄模塊實現(xiàn)8</p><p> 4.2配置文件模塊實現(xiàn)8</p><p> 4.3CPU使用率模塊實現(xiàn)8</p><p> 4.4內(nèi)存使用狀況模塊實現(xiàn)9</p><p> 4.5網(wǎng)絡(luò)流量監(jiān)控模塊實現(xiàn)9</p><p> 4.6進程監(jiān)控模塊實現(xiàn)10</p><p&
13、gt; 4.7磁盤監(jiān)控模塊實現(xiàn)10</p><p> 4.8網(wǎng)絡(luò)通信模塊設(shè)計10</p><p> 4.8.1 TCP網(wǎng)絡(luò)協(xié)議的介紹10</p><p> 4.8.2 IP地址分類介紹13</p><p> 4.8.3 網(wǎng)絡(luò)連接過程實現(xiàn)13</p><p> 第5章主機管理系統(tǒng)的系統(tǒng)調(diào)試1
14、4</p><p> 5.1主機系統(tǒng)調(diào)試方法14</p><p> 5.2主機系統(tǒng)調(diào)試結(jié)果14</p><p> 5.3結(jié)果分析19</p><p> 第6章結(jié)論和展望20</p><p><b> 參考文獻21</b></p><p><
15、b> 附錄22</b></p><p> 作品使用說明書40</p><p><b> 緒論</b></p><p><b> 引言</b></p><p> 隨著時代的不斷進步,人們的生活水平也得到了質(zhì)的飛躍,計算機逐漸步入了每家每戶,成為了人們生活娛樂工作必不可少
16、的伴侶。計算機的功能十分的強大,但是人們對于計算機的運行狀況卻知之甚少,有的時候計算機的大腦CPU已經(jīng)嚴重超負荷,或者計算機的內(nèi)存已經(jīng)達到最大的承受極限了,然而人們并不知曉這些狀況,導(dǎo)致計算機最終超負荷運行而損傷。計算機本身攜帶不方便,尤其是臺式計算機。人們要隨時隨地的掌握計算機的運行狀況,就變得十分困難。所以如果有一款軟件,既能在本地主機,根據(jù)用戶需求顯示出電腦運行的關(guān)鍵信息,又可以在人們外出時,通過遠端實時監(jiān)控掌握家中電腦的運行狀況
17、,那是十分方便和實用的。</p><p> 移動主機管理系統(tǒng)設(shè)計的背景</p><p> 近幾年,隨著網(wǎng)絡(luò)帶寬和計算機處理能力以及存儲容量等性能的迅速提高,各種視頻音頻等信息處理技術(shù)的出現(xiàn),全程數(shù)字化網(wǎng)絡(luò)化的監(jiān)控系統(tǒng)技術(shù)的優(yōu)勢越來越明顯,漸漸的站到了主導(dǎo)的地位,它具有高開放性,高集成性和良好的靈活性為監(jiān)控系統(tǒng)的整體性能提高創(chuàng)造了必要的條件。</p><p>
18、隨著科學(xué)技術(shù)的迅速發(fā)展,人們的生活水準和生活要求不斷提高,人們的生活用具也日益電子化,信息化。遠程監(jiān)控技術(shù)的重要性也在人們的不斷發(fā)展中日益體現(xiàn)出來,正在漸漸的應(yīng)用于生活和商業(yè)開發(fā)的方方面面。監(jiān)控系統(tǒng)正從一個集中監(jiān)控向網(wǎng)絡(luò)遠程監(jiān)控進行發(fā)展。在監(jiān)控系統(tǒng)剛剛產(chǎn)生的初期,大都是采用大型的儀表儀器對各種設(shè)備儀器的重要部分的狀態(tài)進行監(jiān)控,并且是通過操作盤來進行集中操作。發(fā)展至今,監(jiān)控技術(shù)變得越來越成熟,如今監(jiān)控主要以監(jiān)測控制的計算機為主體,與檢測裝
19、置被監(jiān)控的對象和執(zhí)行機構(gòu)共同構(gòu)成了一個大整體。</p><p> 監(jiān)控系統(tǒng)一般是以計算機網(wǎng)絡(luò)為載體,進行數(shù)據(jù)的傳輸。然而現(xiàn)今的監(jiān)控技術(shù)還是主要應(yīng)用于局域區(qū)域內(nèi),他們的監(jiān)控范圍局限在同一個地點,但是由于互聯(lián)網(wǎng)的存在,Internet能實現(xiàn)資源的共享,他可以幫助人們解決很多資源上的問題,,他為遠程管理系統(tǒng)的長遠發(fā)展提供了強大的后臺支持。監(jiān)控技術(shù)的重要性在社會的發(fā)展過程中日益重要,它有廣闊的發(fā)展前景和市場價值。<
20、;/p><p> 本設(shè)計所以實現(xiàn)的目標</p><p> 本設(shè)計實現(xiàn)對電腦主機進行遠程監(jiān)控,以達到能實時掌握電腦此時此刻的詳細運行狀況。萬一出現(xiàn)一些未響應(yīng)或者溫度過高等緊急情況,我們可以進行遠程控制電腦的運行狀態(tài),以緩解電腦的緊急的情況,達到保護電腦的目的。因此著力設(shè)計一個基于ARM開發(fā)板的移動的服務(wù)器(支持監(jiān)控多臺PC機),用來接收PC機發(fā)來的相關(guān)運行信息,在PC機上運行一個客戶端,用于
21、采集本PC機相關(guān)運行數(shù)據(jù),(采集時的重要數(shù)據(jù)記錄本地日志,提供用戶日后查看)然后發(fā)送給服務(wù)器,服務(wù)器會進行數(shù)據(jù)分析,越高警戒值,會反饋給用戶,用戶可以通過服務(wù)器發(fā)送相關(guān)指令,控制PC機的運行,比如關(guān)閉某個進程,重啟PC機,關(guān)閉PC機等操作。</p><p><b> 論文的結(jié)構(gòu)安排</b></p><p> 本文一共分為六個章節(jié):</p><p
22、> 第一章緒論:簡單介紹了課題的選題意義、研究現(xiàn)狀,論文主要工作和結(jié)構(gòu)安排。</p><p> 第二章系統(tǒng)設(shè)計的軟件環(huán)境介紹:介紹了本系統(tǒng)設(shè)計師主要用到的軟件環(huán)境。</p><p> 第三章系統(tǒng)的整體設(shè)計:介紹了主機管理系統(tǒng)的整體設(shè)計框圖,以及系統(tǒng)的工作流程。</p><p> 第四章系統(tǒng)的模塊設(shè)計:介紹了主機管理系統(tǒng)具體模塊的設(shè)計方法和實現(xiàn)過程。&l
23、t;/p><p> 第五章系統(tǒng)的調(diào)試:介紹了系統(tǒng)的調(diào)試流程和調(diào)試過程中出現(xiàn)的問題,進行了相應(yīng)的總結(jié),并提出了解決方法。</p><p> 第六章結(jié)論與展望:總結(jié)了本文的主要工作,并提出了以后有待進一步研究。</p><p> 主機系統(tǒng)設(shè)計軟件壞境介紹</p><p> Notepad++文本編輯器</p><p>
24、 Notepad++是一個很小的,靈活的純文本編輯器,十分好用。它的源代碼是開源的,在文本編輯方面的功能可以與Windows的寫字板功能相當(dāng)。但是我比較看重的是它強大的代碼編寫的功能,在代碼編寫速度和準確度上面,Notepad可謂是讓我如虎添翼。</p><p> 在代碼編輯方面,它自帶聯(lián)想功能,語法高亮,字詞自動完成的功能,還支持同時編輯多重文檔。它支持許多語言,比如C,C++,shell腳本,python
25、等等語言,還自帶編譯的功能,當(dāng)然這個功能,我很少去用,因為下面介紹的GCC編譯器也是一個很強大的編譯神器。</p><p> 在代碼查看方面,它也足夠強大,基本能滿足我的需求。它能自動檢測文件類型,根據(jù)關(guān)鍵字顯示節(jié)點,并且能自由折疊打開,是代碼很具有層次感,看起來比較爽。在每行代碼的開頭,都會有行標號,在軟件頂上會顯示當(dāng)前編輯的文件屬于哪個目錄,在查看源文件和頭文件路徑方面十分方便。在軟件左邊小窗口,會顯示出當(dāng)
26、前文件夾下的所有文件,軟件右邊的小窗口,會顯示源文件中包含的各個函數(shù),按照文件中函數(shù)實現(xiàn)的順序幫你依次排好,可以讓你最快速的定位到某一個函數(shù)。按CTR+F可以查詢當(dāng)前文件或者當(dāng)前打開所有的文件你輸入關(guān)鍵字出現(xiàn)的具體位置,這個功能非常好用。還有一個很實用的功能,點住鼠標右鍵選中一部分關(guān)鍵字,文本中與這個關(guān)鍵字相同的其他地方會被同時選中,對于查看某一個函數(shù)在哪些地方被調(diào)用了,這個方法是最快捷有效的。我利用這個神器寫代碼經(jīng)常用到的幾個功能就介
27、紹到這里,這個神器還有其他許許多多強大的功能,由于本次設(shè)計未曾用到,不做詳細介紹。</p><p><b> GCC編輯器</b></p><p> 數(shù)來按規(guī)則編譯你的源代碼。gcc編譯器的最基礎(chǔ)的用法就是gcc加上源文件,如gcc xxx.c,他將會產(chǎn)生一個名稱為a.out的可執(zhí)行文件,如果你未曾設(shè)置過你的linux相關(guān)配置文件,直接./a.out就可以執(zhí)行這個
28、文件,你就會看到你設(shè)計的功能,前提是你寫的代碼準確無誤,因為即使生成了a.out也不能保證能成功運行,因為比如段錯誤之類的在編譯階段是無法被發(fā)現(xiàn)的,在執(zhí)行的過程中才會體現(xiàn)出來,在本次設(shè)計中,我一般是使用gdb調(diào)試工具來尋找的定位錯誤的位置的,將在下文做介紹。</p><p> 如果你只想通過gcc檢查語法錯誤,只編譯你的文件,并不想生成可執(zhí)行文件,你就可以使用gcc -c 這個選項來完成,在編寫makefile
29、的時候,對于多文件的編譯,經(jīng)常使用到這個參數(shù)。-o這個參數(shù)表示鏈接生成可執(zhí)行文件,而且可執(zhí)行文件名稱可以自己取跟在-o后面。-g這個參數(shù)在調(diào)試方面是比較重要的,如果想要利用gdb調(diào)試器對代碼進行調(diào)試,就必須加上-g這個參數(shù)了。-Wall這個參數(shù)是為了顯示所有調(diào)試產(chǎn)生的警告,對于減少bug方面,這個參數(shù)也是至關(guān)重要的,其他還有一些參數(shù),在本設(shè)計中未曾用到,就不一一介紹了。</p><p><b> GD
30、B調(diào)試器</b></p><p> GDB調(diào)試器在本設(shè)計中,我只是利用它來尋找執(zhí)行產(chǎn)生的段錯誤,其實他的功能遠不止于此。在此我只介紹它定位段錯誤的位置這個功能,其他功能在本次設(shè)計中g(shù)cc編譯器已經(jīng)為它代勞了,就不介紹了。如果執(zhí)行的時候發(fā)生了段錯誤,你就可以gdb加上可執(zhí)行文件,進入gdb調(diào)試。用list指令就可以列出你所調(diào)試的代碼,輸入run就可以開始執(zhí)行你的程序,如果是沒有斷錯誤的情況下,你可以設(shè)
31、置斷點來進行調(diào)試,但是有斷錯誤的情況下,就不必這么繁瑣了。直接run,它運行到產(chǎn)生段錯誤的地方他就會停下來,它產(chǎn)生的調(diào)試信息,一般比較復(fù)雜,所以這時不必急著去研究,再輸入where指令,它就會告訴你在哪個函數(shù),哪行產(chǎn)生了段錯誤,但是有的時候它給出的行數(shù)是一個十六進制的內(nèi)存地址,一般是無法確定行數(shù)的,這時就可以輸入list指令直接列出產(chǎn)生段錯誤的詳細代碼段。然后就可以直接去源文件的具體位置查看代碼出了什么問題。</p>&l
32、t;p> 主機管理系統(tǒng)整體設(shè)計</p><p> 3.1 整體設(shè)計概念設(shè)計圖</p><p> 圖3-1 整體系統(tǒng)設(shè)計概念圖</p><p> 如上圖3-1所示,移動監(jiān)控設(shè)備實時通過網(wǎng)絡(luò)跟個人PC進行通信,pc主機采集各種運行狀態(tài)的詳細信息,發(fā)送到移動監(jiān)控端。移動監(jiān)控端通過網(wǎng)絡(luò)接收到詳細信息打印到屏幕上,并且通過網(wǎng)絡(luò)發(fā)送指令到個人PC機,控制PC機的運
33、行。</p><p> 3.2 軟件工作流程圖</p><p> 3.2.1 主機工作流程圖</p><p> 如下圖3-2所示,軟件開始運行,首先初始化控制臺,然后創(chuàng)建線程接受指令,調(diào)用recv函數(shù)接收。將接收到的數(shù)據(jù)進行判斷,調(diào)用system函數(shù)進行指令的執(zhí)行,并且記錄相關(guān)信息到日志文件。</p><p> 圖 3-2 主機工作流
34、程圖</p><p> 在主線程中,先判斷控制臺初始化的是否成功,如果成功初始化,就進入相關(guān)工作,否則結(jié)束工作,記錄錯誤信息。進入正常流程后,先獲取當(dāng)?shù)貙崟r時間和本地主機ip,顯示在屏幕上,供用戶第一時間可看到。然后依次采集CPU使用率,實時網(wǎng)絡(luò)流量狀況,進程運行狀況,內(nèi)存使用狀況,以及磁盤使用狀況,采集完成一項就及時上傳,記錄成功上傳的記錄,失敗的話就記錄錯誤日志。最后等待一定時間,進行第二次采集上報,實現(xiàn)實
35、時監(jiān)控的目標。</p><p> 3.2.2 監(jiān)控端工作流程圖</p><p> 圖3-3 監(jiān)控端工作流程</p><p> 如上圖3-3所示,軟件啟動首先進入控制臺的初始化,開辟一個線程,用于等待用戶輸入指令去控制主機的運行。一旦用戶輸入指令,就會發(fā)送或者失敗的情況都會記錄相關(guān)情況。主線程顯示相關(guān)時間和IP信息,然后主動connect主機,連接成功后會等待接
36、收數(shù)據(jù),一旦數(shù)據(jù)到達,就會實時分塊的顯示在屏幕上,以供用戶第一時間可以看到自己主機的運行狀況,第一時間做出判斷控制。</p><p> 主機管理系統(tǒng)模塊實現(xiàn)</p><p><b> 日志記錄模塊實現(xiàn)</b></p><p> 錯誤日志模塊設(shè)計的目的是可以快速的了解到系統(tǒng)運行所產(chǎn)生的錯誤信息,準確的判斷系統(tǒng)設(shè)計的漏洞和系統(tǒng)崩潰的原因。其次
37、可以準確的掌握系統(tǒng)指令的執(zhí)行狀況和運行狀況。最重要的一個功能就是采集的信息有一塊出現(xiàn)了錯誤,這時就可以通過日志,準確定位到錯誤原因產(chǎn)生的地方。</p><p> 日志文件的指定格式:[時間][模塊名稱][信息][級別]。</p><p> 級別:DEBUG 調(diào)試級 NORMAL 普通級 WARN 警告級 ERROR 錯誤級。</p><p><b&
38、gt; 配置文件模塊實現(xiàn)</b></p><p> 配置文件是本系統(tǒng)運行的核心部分,系統(tǒng)要采集的關(guān)鍵信息都是從配置文件中讀取的。配置文件包含的內(nèi)容包含目標主機的ip,端口,待監(jiān)控磁盤的名稱,待監(jiān)控進程的名稱,采集時間間隔等,配置文件中每個名稱之間用逗號隔開,并且遵循一定格式。系統(tǒng)一開始運行,第一件要做的事就是初始化配置文件,把配置文件的內(nèi)容讀取到鏈表中,保存在內(nèi)存中,直到整個系統(tǒng)退出。</p
39、><p> CPU使用率模塊實現(xiàn)</p><p> linux操作系統(tǒng)CPU的使用狀況需要從/proc/cpuinfo文件中讀取,然后進行分析計算。CPU的占用狀態(tài)分為用戶狀態(tài),系統(tǒng)狀態(tài)和空閑狀態(tài)。我們也可以用top指令查詢cpu使用的詳細狀況。在/proc/cpuinfo文件中,user time代表用戶時間,system time代表系統(tǒng)時間,waiting time代表等待時間,id
40、le time代表空閑時間,nice time代表nice時間,也就是說是系統(tǒng)調(diào)整進程優(yōu)先級所花費的時間。hard irq time 代表硬中斷處理時間,softirq time代表軟中斷處理時間,stream time代表丟失時間。</p><p> CPU占用率計算公式:</p><p> CPU占用時間=user time+system time+waiting time+idl
41、e time+nice time+ hard irq time+softirq time+stream time。</p><p> %user time=(user time + nice time)/CPU占用時間*100%。</p><p> % system time=( system time + hardirq time +softirq time) /CPU占用時間*10
42、0%。</p><p> % idle time=( idle time) /CPU占用時間*100%。</p><p> % nice time=( nice time) /CPU占用時間*100%。</p><p> % hard irq time=( hard irq time) /CPU占用時間*100%。</p><p>
43、% waiting time=( waiting time) /CPU占用時間*100%。</p><p> % softirq time=( softirq time) /CPU占用時間*100%。</p><p> % stream time=( stream time) /CPU占用時間*100%。</p><p> 內(nèi)存使用狀況模塊實現(xiàn)</p&g
44、t;<p> 內(nèi)存是用來存儲數(shù)據(jù)的,是一種利用半導(dǎo)體技術(shù)做成的電子設(shè)備,電子電路的數(shù)據(jù)是以二進制的方式存儲,存儲器的每一個存儲單元稱做記憶元。存儲器的種類很多,按其用途可分為主存儲器和輔助存儲器,主存儲器又稱內(nèi)存。</p><p> linux操作系統(tǒng)的內(nèi)存使用狀況可以通過/proc/meminfo文件中讀取。這個文件中涉及到三個主要的標志。totalmem代表當(dāng)前總內(nèi)存,freemem代表當(dāng)前
45、空閑內(nèi)存,totalswap代表當(dāng)前可用的交換內(nèi)存,freeswap代表當(dāng)前可交換的空閑內(nèi)存。讀出來的內(nèi)存數(shù)據(jù)一般是以K為單位的,所以要把它換算成兆。換算的公式是1M=1024KB。</p><p> 網(wǎng)絡(luò)流量監(jiān)控模塊實現(xiàn)</p><p> 本模塊主要監(jiān)測當(dāng)前主機的平均上傳流量的速度和下載速度。網(wǎng)絡(luò)流量可以在/proc/net/dev文件獲取當(dāng)前的總值。我采取分別隔相等的秒數(shù)讀取三次流
46、量上傳速度和下載速度并把他們保存在緩存中,最終取三次數(shù)值的平均值,計算出平均的上傳速度和下載速度。</p><p><b> 進程監(jiān)控模塊實現(xiàn)</b></p><p> 需要監(jiān)控的關(guān)鍵進程是事先寫入到配置文件中的,我們可以從配置文件中讀取待監(jiān)控的關(guān)鍵進程,分析出他的關(guān)鍵狀態(tài)。如果不采用寫入配置文件的方式進行監(jiān)控進程,那系統(tǒng)運行的進程非常多,采集出來的數(shù)據(jù)量極大,而
47、且數(shù)度復(fù)雜度很高,針對性很差,難以起到及時發(fā)現(xiàn)不正常進程的效果。</p><p> linux操作系統(tǒng)可以通過ps -ef進行對當(dāng)前系統(tǒng)的所有進程進行查詢。我通過函數(shù)popen打開ps -ef這個指令,然后根據(jù)配置文件所要求的進程進行逐個對比,符合要求的進程,當(dāng)即提取出相關(guān)信息,保存到緩存中,再繼續(xù)對比讀取,直到配置文件中所有待監(jiān)控進程全部尋找完畢。如果待監(jiān)控進程不存在于當(dāng)前系統(tǒng),則將他的進程ID設(shè)置成-1以做
48、區(qū)別。</p><p><b> 磁盤監(jiān)控模塊實現(xiàn)</b></p><p> 待檢測的磁盤名是從配置文件中讀取的,因為我們的pc機可以掛載多個外接磁盤,全部讀取,針對性差,與本設(shè)計初衷不符。linux操作系統(tǒng)的所有磁盤的信息是在/etc/mtab中讀取。我將磁盤的狀態(tài)分成未掛載(0),正常(1),故障(5)。磁盤要采集的信息包括磁盤當(dāng)前的狀態(tài),磁盤的掛載路徑,磁盤
49、的類型,磁盤的塊大小,磁盤的總大小,磁盤的空閑大小等。這些信息采集出來可以在本地pc機上通過指令查看,同時也會發(fā)送給遠端監(jiān)控端。</p><p><b> 網(wǎng)絡(luò)通信模塊設(shè)計</b></p><p> TCP網(wǎng)絡(luò)協(xié)議的介紹</p><p> 本設(shè)計網(wǎng)絡(luò)通信主要是基于TCP網(wǎng)絡(luò)協(xié)議實現(xiàn)的,首先詳細介紹下TCP網(wǎng)絡(luò)協(xié)議。TCP是一種面向連接的,
50、可靠的,基于字節(jié)流的傳輸層的通信協(xié)議。TCP/ip協(xié)議遵循四層的一個模型,分別是應(yīng)用層,傳輸層,互聯(lián)層,網(wǎng)絡(luò)接口層。與之對應(yīng)的是OSI模型,它的物理層,表示層,會話層其實是對應(yīng)于四層模型的應(yīng)用層。OSI的傳輸層對應(yīng)于四層模型的TCP/UDP層,OSI的網(wǎng)絡(luò)層對應(yīng)于四層模型的IPV4,IPV6地址,OSI的數(shù)據(jù)鏈路層和物理層其實就是對應(yīng)與四層模型的網(wǎng)絡(luò)介質(zhì)層。下圖4-1是這兩個模型的圖形表示,看起來會比較直觀。</p>&l
51、t;p><b> 圖4-1模型對比</b></p><p> TCP協(xié)議數(shù)據(jù)進入?yún)f(xié)議棧時的封裝如下圖4-2所示:</p><p> 圖4-2 TCP協(xié)議入棧數(shù)據(jù)封裝</p><p> 下圖是TCP協(xié)議建立對話連接的示意圖:</p><p> 圖4-3 TCP對話連接建立</p><p&
52、gt; 下圖是TCP協(xié)議斷開對話連接的示意圖:</p><p> 圖4-4 TCP連接斷開</p><p><b> IP地址分類介紹</b></p><p> 其次本設(shè)計采用的目標連接是基于IPV4類型的IP地址的,IP地址分為IPV4和IPV6兩種類型,目前廣泛采用的是IPV4地址,目前的主流IP地址基本都是采用IPV4的,但是IP
53、V4地址的數(shù)量有限,隨著電腦的不斷普及和網(wǎng)絡(luò)的擴張,下面詳細介紹IPV4地址族的分類和子網(wǎng)劃分。</p><p> A類IP地址由1字節(jié)的網(wǎng)絡(luò)地址和3字節(jié)主機地址組成,網(wǎng)絡(luò)地址的最高位必須是“0”, 地址范圍1.0.0.1-126.255.255.254??捎玫腁類網(wǎng)絡(luò)有126個,每個網(wǎng)絡(luò)能容納1677214個主機。 </p><p> B類IP地址由2個字節(jié)的網(wǎng)絡(luò)地址和2個字節(jié)的
54、主機地址組成,網(wǎng)絡(luò)地址的最高位必須是“10”,地址范圍128.1.0.1-191.255.255.254??捎玫腂類網(wǎng)絡(luò)有16384個,每個網(wǎng)絡(luò)能容納65534主機 。</p><p> C類IP地址由3字節(jié)的網(wǎng)絡(luò)地址和1字節(jié)的主機地址組成,網(wǎng)絡(luò)地址的最高位必須是“110”。范圍192.0.1.1-223.255.255.254。C類網(wǎng)絡(luò)可達2097152個,每個網(wǎng)絡(luò)能容納254個主機。</p>
55、<p> D類IP地址第一個字節(jié)以“1110”開始,它是一個專門保留的地址。它并不指向特定的網(wǎng)絡(luò),目前這一類地址被用在多點廣播(Multicast)中。多點廣播地址用來一次尋址一組計算機,它標識共享同一協(xié)議的一組計算機。地址范圍224.0.0.1-239.255.255.254。</p><p> E類IP地址第一個字節(jié)以“1111”開始,為將來使用保留。E類地址保留,僅作實驗和開發(fā)用。全零(“0.
56、0.0.0”)地址指任意網(wǎng)絡(luò)。全“1”的IP(“255.255.255.255”)是當(dāng)前子網(wǎng)的廣播地址。</p><p><b> 網(wǎng)絡(luò)連接過程實現(xiàn)</b></p><p> 在監(jiān)控端,調(diào)用socket函數(shù)初始化一個套接字,調(diào)用connect函數(shù)進行主動連接,重復(fù)嘗試連接多次。在服務(wù)端,也是調(diào)用socket函數(shù)初始化一個套接字,調(diào)用bind函數(shù)綁定一個本地ip地址
57、,綁定成功后調(diào)用listen函數(shù)進行連接監(jiān)聽。監(jiān)聽成功后,調(diào)停accept函數(shù)進行連接等待,使用select設(shè)置等待超時時間。</p><p> 主機管理系統(tǒng)的系統(tǒng)調(diào)試</p><p><b> 主機系統(tǒng)調(diào)試方法</b></p><p> 開啟PC端的采集發(fā)送程序,查看確認待監(jiān)控的項目后,配置好網(wǎng)絡(luò)地址和端口后,啟動等待監(jiān)控端的連接。注意
58、觀察監(jiān)控端的連接超時等待次數(shù)。發(fā)現(xiàn)多次重連以后依舊無法建立連接,采取了關(guān)閉軟件進行網(wǎng)絡(luò)的調(diào)試,互相PING對方的IP地址,發(fā)現(xiàn)無法PING通,確認為網(wǎng)絡(luò)設(shè)置出現(xiàn)問題,重新配置了網(wǎng)關(guān)和IP地址以后成功解決了連接問題。</p><p> 開啟移動端電源,運行移動端的監(jiān)控程序,配置好網(wǎng)絡(luò)地址和端口后,啟動主動連接。三路握手成功后,數(shù)據(jù)會陸續(xù)發(fā)送到移動監(jiān)控端,注意觀察LCD液晶屏幕的數(shù)據(jù)顯示,仔細核實數(shù)據(jù),記錄丟包和漏
59、發(fā)的項目。斷開連接,查看日志文件的重要信息和錯誤日志,并作分析,進行進一步的改進。調(diào)試發(fā)現(xiàn)在斷開后有時會出現(xiàn)不穩(wěn)定現(xiàn)象,一端斷開了以后,另一端會進入非正常工作。后來添加了斷開判斷機制,設(shè)置斷開標志位進行判斷處理,成功解決了這個問題。</p><p><b> 主機系統(tǒng)調(diào)試結(jié)果</b></p><p> 經(jīng)測試,數(shù)據(jù)收發(fā)基本正常,LCD屏幕顯示合理有序,基本在允許的
60、誤差之內(nèi)。具體數(shù)據(jù)如下圖所示:</p><p> 圖5-1 內(nèi)存狀況數(shù)據(jù)</p><p> 如上圖5-1所示,顯示的為當(dāng)前電腦的內(nèi)存使用狀況。數(shù)據(jù)表明剩余內(nèi)存比較少,說明當(dāng)前電腦開啟的應(yīng)用過多,消耗了大量內(nèi)存,用戶應(yīng)該適當(dāng)?shù)年P(guān)閉一些不使用的應(yīng)用來釋放內(nèi)存,緩解電腦的內(nèi)存壓力,減少對電腦的損傷。</p><p> 圖5-2 進程運行狀況</p>&
61、lt;p> 如上圖5-2所示,顯示為當(dāng)前主要監(jiān)控的進程的運行狀況的數(shù)據(jù),上圖顯示進程ID為-1的表明當(dāng)前監(jiān)控的進程已經(jīng)退出或者意外關(guān)閉。</p><p> 5-3 CPU使狀況</p><p> 如上圖5-3所示,顯示為當(dāng)前CPU的使用情況,當(dāng)前電腦CPU使用率為百分之三,屬于比較正常的情況,說明當(dāng)前電腦運行基本穩(wěn)定。</p><p> 圖 5-4 實
62、時流量速度狀況</p><p> 如上圖5-4所示,顯示為當(dāng)前電腦實時流量上傳和下載速度的使用狀況。上面數(shù)據(jù)表明當(dāng)前主機沒有從網(wǎng)絡(luò)上面下載數(shù)據(jù)包,以28KB每秒的速度再從網(wǎng)絡(luò)上下載數(shù)據(jù)包,當(dāng)前網(wǎng)速偏慢或者表明下載的資源稀少,導(dǎo)致下載速度過慢。</p><p><b> 圖 5-5 指令</b></p><p> 如上圖5-5所示,clea
63、n表示清屏指令,show可以顯示相關(guān)信息, start表示開始發(fā)送運行狀況信息,ls代表打印所有命令, quit表示結(jié)束整個軟件運行,change是改變配置文件信息。</p><p> 圖5-6 磁盤運行狀況</p><p> 如上圖5-6所示,顯示為當(dāng)前電腦磁盤的使用狀況。上面數(shù)據(jù),顯示磁盤大小為0的,說明待監(jiān)控的磁盤狀態(tài)不正確,可能是配置的時候磁盤名輸入錯誤,導(dǎo)致無法正確讀取,或者
64、待檢測的磁盤已經(jīng)被拔出,處于為掛載狀態(tài)。</p><p> 圖5-7開始連接主機</p><p> 如上圖5-7所示,顯示為當(dāng)前開始TCP網(wǎng)絡(luò)連接時的狀況。上圖表明,當(dāng)前的網(wǎng)絡(luò)狀況是不通的,無法進行網(wǎng)絡(luò)連接。</p><p><b> 結(jié)果分析</b></p><p> 本次設(shè)計經(jīng)過設(shè)計,實現(xiàn),調(diào)試最終圓滿完成,
65、經(jīng)調(diào)試,采集出來的數(shù)據(jù)基本符合實際情況,連接發(fā)送情況基本正常。經(jīng)過多次運行測試,基本每次都能穩(wěn)定運行,網(wǎng)絡(luò)連接基本穩(wěn)定。但是設(shè)計和調(diào)試中也碰到了比較多的問題,首先連接斷開后,沒有很好的進行斷開處理,會產(chǎn)生大量錯誤信息,后來經(jīng)多次實驗,加上斷開連接判斷,很好地解決了這個問題。有些數(shù)據(jù)量比較大,比如說進程相關(guān)數(shù)據(jù),磁盤相關(guān)數(shù)據(jù),會產(chǎn)生大量的數(shù)據(jù),在屏幕上一次性顯示有一定的困難,所以這兩塊數(shù)據(jù)的顯示不是很直觀。其他功能基本與設(shè)計目標符合。&l
66、t;/p><p><b> 結(jié)論和展望</b></p><p> 本次畢業(yè)設(shè)計經(jīng)過調(diào)試,采集到的數(shù)據(jù)和效果,基本符合預(yù)先設(shè)計的需求,功能穩(wěn)定,使用也還直觀方便,具有一定的實際意義。由于本人掌握的知識有限,設(shè)計雖已完成,但其中有很多不足,為了完成這次設(shè)計,在幾個月內(nèi),認真收集有關(guān)資料并做相關(guān)的整理和閱讀,為這次的設(shè)計做好充分的準備。經(jīng)過這次畢設(shè),我體會到了以下幾點心得,
67、1.不論做什么,都要做好充分準備,不應(yīng)盲目隨意的為完成任務(wù)而完成而學(xué)習(xí)。2.通過學(xué)習(xí),使我對硬件設(shè)計和各模塊的功能有了更深的了解,同時提高了動手能力。3.通過學(xué)習(xí),加強了我寫代碼的能力,培養(yǎng)了良好的編程習(xí)慣,擴展了知識層面。在以后的學(xué)習(xí)生涯中,還需要不斷地努力和進步,爭取達到新的高度。</p><p> 雖然已經(jīng)順利的實現(xiàn)了預(yù)計的功能,但是本次設(shè)計的移動主機管理系統(tǒng)還有很大的提升空間,還能有更好的發(fā)展前景。本次
68、設(shè)計只是實現(xiàn)了點對點的移動監(jiān)控,一個移動設(shè)備只是單一的監(jiān)控了一臺電腦,局限性比較大,將來可以進行改進,實現(xiàn)一對多監(jiān)控,還可以實現(xiàn)任意選擇監(jiān)控任意一臺你想監(jiān)控的電腦,可以在一個區(qū)域內(nèi)實現(xiàn)電腦ip地址的廣播,只要你知道主機的用戶名和密碼,就可以實施對他的監(jiān)控,如果實現(xiàn)諸如此類的完善,那本設(shè)計的功能將會變得更加完善和強大,發(fā)展前景將會一片廣闊。 </p><p><b> 參考文獻</b>&
69、lt;/p><p> 蔚敏, 偉民. 數(shù)據(jù)結(jié)構(gòu)[M]. 北京:清華大學(xué)出版社,1992.</p><p> 邵平凡, 徐霖. 基于 Qt 的嵌入式 GUI 開發(fā)的應(yīng)用研究[J]. 工業(yè)控制計算機,2011, 24(10): 49-51.</p><p> 鳥哥, 許偉, 林彩娥. 鳥哥的 Linux 私房菜: 第二版. 基礎(chǔ)學(xué)習(xí)篇[M]. 北京:人民郵電出版社,2
70、007.</p><p> 芬納, 魯多夫, 楊繼張. UNIX 網(wǎng)絡(luò)編程: 套接口 API. 第 1 卷[M]. 北京:清華大學(xué)出版社有限公司,2006.</p><p> Stevens W R. UNIX 環(huán)境高級編程: 英文版[M]. 北京:機械工業(yè)出版社,2002.</p><p> 宋海民. C 語言程序設(shè)計[J]. 科技信息,2010, 35(3
71、0): 19-19.</p><p> 林登.C 專家編程[M]. 北京:人民郵電出版社,2002.</p><p> Schmidt D C. The ADAPTIVE Communication Environment: An object-oriented network programming toolkit for developing communication softw
72、are[J], Citeseer, 1993,14(11):18-24</p><p> Raymond E S. The art of Unix programming[M]. New York:Addison-Wesley Professional, 2003.</p><p><b> 附錄</b></p><p><b>
73、 congif.h</b></p><p> #ifndef CON_H</p><p> #define CON_H</p><p> #include<stdio.h></p><p> #include<stdlib.h></p><p> #define LEN
74、 100 //配置文件路徑名長度 </p><p> #define FILENAME1 "/mnt/hgfs/share/webmaster/config.pro"//配置文件放置路徑及配置文件名</p><p> typedef struct Config {</p><p> int reportInt
75、erval; //上報時間間隔</p><p> char serverIp[32]; //服務(wù)器ip地址</p><p> int serverPort; //服務(wù)端口</p><p> int listenPort; //監(jiān)聽端口</p><p> char logPath[128];
76、 //日志文件路徑</p><p> char partitions[1024]; //監(jiān)視的磁盤名字</p><p> char processes[1024]; //監(jiān)視的進程名字</p><p><b> }CFG;</b></p><p><b> /*</b></p&g
77、t;<p><b> *功能:讀配置文件</b></p><p> *filename:配置文件的路徑及配置文件名稱</p><p> *cfg:struct Config結(jié)構(gòu)體指針</p><p> *返回:讀取成功返回CFG結(jié)構(gòu)體指針,失敗返回NULL</p><p><b> */
78、</b></p><p> extern CFG* Read_Congif(const char *filename,CFG *cfg);</p><p><b> #endif</b></p><p><b> socket.h</b></p><p> #ifndef MY_
79、CSOCKET_H</p><p> #define MY_CSOCKET_H</p><p> #include <sys/types.h></p><p> #include <netinet/in.h></p><p> #include <arpa/inet.h></p>&l
80、t;p> #include <sys/socket.h></p><p> #include <sys/time.h></p><p> #include <unistd.h></p><p> #include <netdb.h></p><p> #include <s
81、ys/un.h></p><p> extern int myConnect(const char *address,int port);</p><p> extern int myBind(int sock, const char *ip, int port);</p><p> extern int setBlock(int sock, int b
82、lock);</p><p> extern char *getHostByName(const char *host, char *ip);</p><p> extern int timeRecv(int fd, char* buf, int size, int timeout);</p><p> extern int timeConnect(const
83、 char *addr, int port, int timeout);</p><p> extern int timeAccept(int sock, int timeout);</p><p> extern int fmtSend(int sock, int maxLen, const char *fmt, ...);</p><p> extern
84、int SetRecvTimeOut(int sock, int sec, int usec);</p><p><b> #endif</b></p><p><b> cpu.h</b></p><p> #ifndef CPU_H</p><p> #define CPU_H</
85、p><p> #include<stdio.h></p><p> #include<unistd.h></p><p><b> /*</b></p><p> *功能:獲取cpu使用率</p><p><b> *參數(shù): 無</b></
86、p><p> *返回:讀取成功成功返回當(dāng)前cpu使用率,失敗返回-1</p><p><b> */</b></p><p> extern int Cpu_Read_Stat ();</p><p><b> #endif</b></p><p><b>
87、mem.h</b></p><p> #ifndef MEMFINISH_H</p><p> #define MEMFINISH_H</p><p> #include<stdio.h></p><p> #include<string.h></p><p> /****
88、******************************</p><p><b> 結(jié)構(gòu)體</b></p><p> ***********************************/</p><p> typedef struct MemInfo </p><p><b> {</b&
89、gt;</p><p> unsigned long long totalMem;</p><p> unsigned long long freeMem;</p><p> unsigned long long totalSwap;</p><p> unsigned long long freeSwap;</p>&
90、lt;p><b> }MEM;</b></p><p><b> /*</b></p><p> *功能:獲取內(nèi)存使用狀況</p><p> *mem:內(nèi)存結(jié)構(gòu)體指針</p><p> *返回:成功返回0,失敗返回-1</p><p><b> *
91、/</b></p><p> extern int GetMeminfo(MEM *mem); //獲取內(nèi)存信息</p><p><b> #endif</b></p><p><b> net.h</b></p><p> #ifndef VVOIP_LOG_H</p&g
92、t;<p> #define VVOIP_LOG_H</p><p> #define LOG_FILE "log.txt"</p><p> enum LOG_LEVEL {</p><p> LOG_DEBUG,</p><p><b> LOG_INFO,</b><
93、/p><p><b> LOG_WARN,</b></p><p><b> LOG_ERROR</b></p><p><b> };</b></p><p><b> /*</b></p><p><b> *功
94、能:寫日志</b></p><p> *參數(shù):日志信息,時間,模塊名稱,日志級別,日志內(nèi)容</p><p><b> *</b></p><p> *返回:成功返回0,失敗返回-1</p><p><b> */</b></p><p> extern
95、int Log(const char *modName, int level, const char *fmt, ...);</p><p><b> #endif</b></p><p><b> process.h</b></p><p> #ifndef PROCESS_H</p><p&g
96、t; #define PROCESS_H</p><p> #include"list.h"</p><p> struct process</p><p><b> {</b></p><p> char processname[50];</p><p><b
97、> int PID;</b></p><p> int count;</p><p> int status;</p><p><b> };</b></p><p> typedef struct process item;</p><p> int append
98、_list(LIST* attr,char *str);</p><p> int GetProcesses(LIST *attr);</p><p> int count_num(char *str,FILE* fp);</p><p> item* append_struct(char *str,int PID,int num,int status);&
99、lt;/p><p> int travl_list_process(LIST* attr);</p><p><b> #endif</b></p><p> partition.h</p><p> #ifndef PARLIST_H</p><p> #define PARLIST_H&
100、lt;/p><p> #include<stdio.h></p><p> #include<string.h></p><p> #include<unistd.h></p><p> #include<stdlib.h></p><p> #include<
101、;ctype.h></p><p> #include <sys/vfs.h></p><p> #include"congif.h"</p><p> #include"list.h"</p><p> #include "log.h"</p>
102、<p> typedef struct Partition {</p><p> char partition[128]; //磁盤分區(qū)設(shè)備名</p><p> char mountPort[128]; //磁盤分區(qū)掛載路徑</p><p> char fstype[16]; //文件系統(tǒng)格式</p><p> lon
103、g file_block;//文件總數(shù)</p><p> unsigned long long totalSize; //總空間,單位M</p><p> unsigned long long freeSize; //剩余空間,單位M</p><p> int status; //狀態(tài),0表示正常,-1表示未掛載</p><p><
104、;b> }PAR;</b></p><p> typedef struct Partition item1;</p><p><b> /*</b></p><p><b> *功能:分割字符串</b></p><p> *str:帶分割字符串指針</p>
105、<p> *str1:保存分割后字符串的指針</p><p> *返回:讀取成功返回0,失敗返回-1</p><p><b> */</b></p><p> int Par_Cmd(char *str,char *str1);</p><p><b> /*</b></p
106、><p> *功能:讀mtab文件</p><p> *str,str1,str2,str3:保存讀出信息的指針</p><p> *返回:成功返回0,失敗返回-1</p><p><b> */</b></p><p> int Read_Mtab(char* str,char* str1
107、,char* str2,char* str3);</p><p><b> /*</b></p><p><b> *功能:寫磁盤</b></p><p> *mountport:掛載路徑</p><p> *status:掛載狀態(tài)</p><p> *返回:成功返
108、回0,失敗返回-1</p><p><b> */</b></p><p> int Write_Disk(char *mountPort,int *status);</p><p><b> /*</b></p><p> *功能:讀statfs結(jié)構(gòu)體</p><p&g
109、t; *mountport:掛載路徑</p><p> *files:文件數(shù)</p><p> *totalsize:總空間大小</p><p> *freesize:剩余空間大小</p><p> *返回:成功返回0,失敗返回-1</p><p><b> */</b></p&
110、gt;<p> int Read_Statfs(char *mountPort,long *files,unsigned long long *totalsize,unsigned long long *freesize);</p><p> int GetPartitions(LIST *head);</p><p><b> #endif</b>
111、;</p><p><b> net.h</b></p><p> #ifndef NET_H_</p><p> #define NET_H_</p><p> #include <stdio.h></p><p> #include <string.h><
112、;/p><p> #include <stdlib.h></p><p> #include<ctype.h></p><p> #include<unistd.h></p><p> struct NetInfo</p><p><b> {</b>&l
113、t;/p><p> unsigned long upSpeed;</p><p> unsigned long downSpeed;</p><p><b> };</b></p><p><b> /*</b></p><p> *功能:獲取網(wǎng)絡(luò)流量速度</p&
114、gt;<p> *recv:保存接收速度的地址,</p><p> *tran:保存上傳速度的地址</p><p> *返回:成功返回0,失敗返回-1</p><p><b> */</b></p><p> extern int ReadNetSpeed(unsigned long *recv,
115、unsigned long *tran);</p><p><b> /*</b></p><p> *功能:獲取上傳和下載的速度</p><p> *net: 流量信息結(jié)構(gòu)體指針</p><p> *返回:讀取成功返回0,失敗返回-1</p><p><b> */</
116、b></p><p> extern int GetNetInfo(struct NetInfo *net);</p><p><b> #endif</b></p><p><b> client.h</b></p><p> #ifndef CLIENT_H</p>
117、<p> #define CLIENT_H</p><p> #include <stdio.h></p><p> #include"partition.h"</p><p> #include"congif.h"</p><p> #include"list
118、.h"</p><p> #include"cpu.h"</p><p> #include"mem.h"</p><p> #include"net.h"</p><p> #include"thread.h"</p><p
119、> #include <time.h></p><p> #include <pthread.h></p><p> #include <unistd.h></p><p> #include <ctype.h></p><p> #include<error.h>&
120、lt;/p><p> #define CMD_LEN 50 //控制臺命令長度</p><p> #define DES_LEN80//有關(guān)命令描述長度</p><p> #define CMD_NUM6//命令數(shù)目(根據(jù)自己的需要去更改個數(shù))</p><p> #define PROMPT"
121、[my-control] #" //控制終端顯示符</p><p><b> //命令結(jié)構(gòu)體</b></p><p> typedef struct cmd_info</p><p><b> {</b></p><p> char cmdn[CMD_LEN + 1];
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文基于jsp的畢業(yè)論文管理系統(tǒng)的設(shè)計
- 畢業(yè)論文(設(shè)計)基于.net畢業(yè)論文管理系統(tǒng)
- 基于android的移動辦公系統(tǒng)畢業(yè)論文
- 基于jsp技術(shù)的it設(shè)備管理系統(tǒng)實現(xiàn)畢業(yè)論文
- 畢業(yè)設(shè)計(論文)-企業(yè)設(shè)備管理系統(tǒng)畢業(yè)論文-
- 畢業(yè)論文——基于bs結(jié)構(gòu)的工廠設(shè)備管理系統(tǒng)的設(shè)計與開發(fā)
- 畢業(yè)論文——基于bs結(jié)構(gòu)的工廠設(shè)備管理系統(tǒng)的設(shè)計與開發(fā)
- 畢業(yè)論文(設(shè)計)基于web的畢業(yè)設(shè)計管理系統(tǒng)
- 畢業(yè)論文---基于jsp的在線畢業(yè)論文管理系統(tǒng)
- 基于移動終端課堂觀察系統(tǒng)的設(shè)計與實現(xiàn)畢業(yè)論文
- 畢業(yè)論文管理系統(tǒng)的設(shè)計
- 畢業(yè)論文 基于android系統(tǒng)的課程管理系統(tǒng)設(shè)計
- 畢業(yè)論文管理系統(tǒng)的設(shè)計
- 畢業(yè)論文管理系統(tǒng)的設(shè)計
- 畢業(yè)論文管理系統(tǒng)的設(shè)計
- 基于bs的學(xué)院畢業(yè)設(shè)計管理系統(tǒng) ——面向本科生的畢業(yè)論文設(shè)計管理-畢業(yè)論文
- 基于倉庫管理系統(tǒng)的畢業(yè)論文
- 畢業(yè)論文---基于android平臺的移動警務(wù)通系統(tǒng)
- 畢業(yè)論文--基于vb的財務(wù)管理系統(tǒng)設(shè)計
- 儀器設(shè)備信息管理系統(tǒng)設(shè)計【畢業(yè)論文】
評論
0/150
提交評論