基于移動設備的主機管理系統(tǒng)的設計-畢業(yè)論文_第1頁
已閱讀1頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  畢 業(yè) 設 計(論 文)</p><p>  設計(論文)題目:基于移動設備的主機管理系統(tǒng)的設計 </p><p>  學 院 名 稱: xxx </p><p>  專 業(yè): xxx </p><p>  班

2、 級: xxx </p><p>  姓 名: xxx 學 號 xxx </p><p>  指 導 教 師: xxx 職 稱 xxx </p><p>  企 業(yè) 教 師: xxx 企 業(yè)

3、 </p><p>  定稿日期: 2014 年 5 月 6 日</p><p>  基于移動設備的主機管理系統(tǒng)的設計</p><p><b>  摘 要 </b></p><p>  本系統(tǒng)是一個基于ARM開發(fā)板的移動的服務器,支持有線模式或者WIFI模式進行收發(fā)數據。用來接收PC機發(fā)來的相關運行

4、信息,實現(xiàn)遠程監(jiān)測控制主機的運行狀態(tài)。在PC機上運行一個客戶端,用于采集本PC機相關運行數據,如定期采集CPU的使用率,定期采集內存的狀態(tài),采集磁盤信息,監(jiān)控當前系統(tǒng)中運行的進程的狀態(tài),需要監(jiān)控的進程的列表也是從配置文件中讀取,網絡流量監(jiān)控,采集時的重要數據記錄本地日志,提供用戶日后查看,然后發(fā)送給服務器,服務器會進行數據分析,越高警戒值,會反饋給用戶,用戶可以通過服務器按鍵發(fā)送相關指令,控制PC機的運行,比如關閉某個進程,重啟PC機,

5、關閉PC機等操作。</p><p>  關鍵詞:服務器,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)設計的背景1</p><p>  1.3本設計所以實現(xiàn)的目標2</p

10、><p>  1.4論文的結構安排2</p><p>  第2章主機系統(tǒng)設計軟件壞境介紹3</p><p>  2.1Notepad++文本編輯器3</p><p>  2.2GCC編輯器4</p><p>  2.3GDB調試器4</p><p>  第3章主機管理系統(tǒng)整體設

11、計5</p><p>  3.1 整體設計概念設計圖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內存使用狀況模塊實現(xiàn)9</p><p>  4.5網絡流量監(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網絡通信模塊設計10</p><p>  4.8.1 TCP網絡協(xié)議的介紹10</p><p>  4.8.2 IP地址分類介紹13</p><p>  4.8.3 網絡連接過程實現(xiàn)13</p><p>  第5章主機管理系統(tǒng)的系統(tǒng)調試1

14、4</p><p>  5.1主機系統(tǒng)調試方法14</p><p>  5.2主機系統(tǒng)調試結果14</p><p>  5.3結果分析19</p><p>  第6章結論和展望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>  隨著時代的不斷進步,人們的生活水平也得到了質的飛躍,計算機逐漸步入了每家每戶,成為了人們生活娛樂工作必不可少

16、的伴侶。計算機的功能十分的強大,但是人們對于計算機的運行狀況卻知之甚少,有的時候計算機的大腦CPU已經嚴重超負荷,或者計算機的內存已經達到最大的承受極限了,然而人們并不知曉這些狀況,導致計算機最終超負荷運行而損傷。計算機本身攜帶不方便,尤其是臺式計算機。人們要隨時隨地的掌握計算機的運行狀況,就變得十分困難。所以如果有一款軟件,既能在本地主機,根據用戶需求顯示出電腦運行的關鍵信息,又可以在人們外出時,通過遠端實時監(jiān)控掌握家中電腦的運行狀況

17、,那是十分方便和實用的。</p><p>  移動主機管理系統(tǒng)設計的背景</p><p>  近幾年,隨著網絡帶寬和計算機處理能力以及存儲容量等性能的迅速提高,各種視頻音頻等信息處理技術的出現(xiàn),全程數字化網絡化的監(jiān)控系統(tǒng)技術的優(yōu)勢越來越明顯,漸漸的站到了主導的地位,它具有高開放性,高集成性和良好的靈活性為監(jiān)控系統(tǒng)的整體性能提高創(chuàng)造了必要的條件。</p><p>  

18、隨著科學技術的迅速發(fā)展,人們的生活水準和生活要求不斷提高,人們的生活用具也日益電子化,信息化。遠程監(jiān)控技術的重要性也在人們的不斷發(fā)展中日益體現(xiàn)出來,正在漸漸的應用于生活和商業(yè)開發(fā)的方方面面。監(jiān)控系統(tǒng)正從一個集中監(jiān)控向網絡遠程監(jiān)控進行發(fā)展。在監(jiān)控系統(tǒng)剛剛產生的初期,大都是采用大型的儀表儀器對各種設備儀器的重要部分的狀態(tài)進行監(jiān)控,并且是通過操作盤來進行集中操作。發(fā)展至今,監(jiān)控技術變得越來越成熟,如今監(jiān)控主要以監(jiān)測控制的計算機為主體,與檢測裝

19、置被監(jiān)控的對象和執(zhí)行機構共同構成了一個大整體。</p><p>  監(jiān)控系統(tǒng)一般是以計算機網絡為載體,進行數據的傳輸。然而現(xiàn)今的監(jiān)控技術還是主要應用于局域區(qū)域內,他們的監(jiān)控范圍局限在同一個地點,但是由于互聯(lián)網的存在,Internet能實現(xiàn)資源的共享,他可以幫助人們解決很多資源上的問題,,他為遠程管理系統(tǒng)的長遠發(fā)展提供了強大的后臺支持。監(jiān)控技術的重要性在社會的發(fā)展過程中日益重要,它有廣闊的發(fā)展前景和市場價值。<

20、;/p><p>  本設計所以實現(xiàn)的目標</p><p>  本設計實現(xiàn)對電腦主機進行遠程監(jiān)控,以達到能實時掌握電腦此時此刻的詳細運行狀況。萬一出現(xiàn)一些未響應或者溫度過高等緊急情況,我們可以進行遠程控制電腦的運行狀態(tài),以緩解電腦的緊急的情況,達到保護電腦的目的。因此著力設計一個基于ARM開發(fā)板的移動的服務器(支持監(jiān)控多臺PC機),用來接收PC機發(fā)來的相關運行信息,在PC機上運行一個客戶端,用于

21、采集本PC機相關運行數據,(采集時的重要數據記錄本地日志,提供用戶日后查看)然后發(fā)送給服務器,服務器會進行數據分析,越高警戒值,會反饋給用戶,用戶可以通過服務器發(fā)送相關指令,控制PC機的運行,比如關閉某個進程,重啟PC機,關閉PC機等操作。</p><p><b>  論文的結構安排</b></p><p>  本文一共分為六個章節(jié):</p><p

22、>  第一章緒論:簡單介紹了課題的選題意義、研究現(xiàn)狀,論文主要工作和結構安排。</p><p>  第二章系統(tǒng)設計的軟件環(huán)境介紹:介紹了本系統(tǒng)設計師主要用到的軟件環(huán)境。</p><p>  第三章系統(tǒng)的整體設計:介紹了主機管理系統(tǒng)的整體設計框圖,以及系統(tǒng)的工作流程。</p><p>  第四章系統(tǒng)的模塊設計:介紹了主機管理系統(tǒng)具體模塊的設計方法和實現(xiàn)過程。&l

23、t;/p><p>  第五章系統(tǒng)的調試:介紹了系統(tǒng)的調試流程和調試過程中出現(xiàn)的問題,進行了相應的總結,并提出了解決方法。</p><p>  第六章結論與展望:總結了本文的主要工作,并提出了以后有待進一步研究。</p><p>  主機系統(tǒng)設計軟件壞境介紹</p><p>  Notepad++文本編輯器</p><p>

24、  Notepad++是一個很小的,靈活的純文本編輯器,十分好用。它的源代碼是開源的,在文本編輯方面的功能可以與Windows的寫字板功能相當。但是我比較看重的是它強大的代碼編寫的功能,在代碼編寫速度和準確度上面,Notepad可謂是讓我如虎添翼。</p><p>  在代碼編輯方面,它自帶聯(lián)想功能,語法高亮,字詞自動完成的功能,還支持同時編輯多重文檔。它支持許多語言,比如C,C++,shell腳本,python

25、等等語言,還自帶編譯的功能,當然這個功能,我很少去用,因為下面介紹的GCC編譯器也是一個很強大的編譯神器。</p><p>  在代碼查看方面,它也足夠強大,基本能滿足我的需求。它能自動檢測文件類型,根據關鍵字顯示節(jié)點,并且能自由折疊打開,是代碼很具有層次感,看起來比較爽。在每行代碼的開頭,都會有行標號,在軟件頂上會顯示當前編輯的文件屬于哪個目錄,在查看源文件和頭文件路徑方面十分方便。在軟件左邊小窗口,會顯示出當

26、前文件夾下的所有文件,軟件右邊的小窗口,會顯示源文件中包含的各個函數,按照文件中函數實現(xiàn)的順序幫你依次排好,可以讓你最快速的定位到某一個函數。按CTR+F可以查詢當前文件或者當前打開所有的文件你輸入關鍵字出現(xiàn)的具體位置,這個功能非常好用。還有一個很實用的功能,點住鼠標右鍵選中一部分關鍵字,文本中與這個關鍵字相同的其他地方會被同時選中,對于查看某一個函數在哪些地方被調用了,這個方法是最快捷有效的。我利用這個神器寫代碼經常用到的幾個功能就介

27、紹到這里,這個神器還有其他許許多多強大的功能,由于本次設計未曾用到,不做詳細介紹。</p><p><b>  GCC編輯器</b></p><p>  數來按規(guī)則編譯你的源代碼。gcc編譯器的最基礎的用法就是gcc加上源文件,如gcc xxx.c,他將會產生一個名稱為a.out的可執(zhí)行文件,如果你未曾設置過你的linux相關配置文件,直接./a.out就可以執(zhí)行這個

28、文件,你就會看到你設計的功能,前提是你寫的代碼準確無誤,因為即使生成了a.out也不能保證能成功運行,因為比如段錯誤之類的在編譯階段是無法被發(fā)現(xiàn)的,在執(zhí)行的過程中才會體現(xiàn)出來,在本次設計中,我一般是使用gdb調試工具來尋找的定位錯誤的位置的,將在下文做介紹。</p><p>  如果你只想通過gcc檢查語法錯誤,只編譯你的文件,并不想生成可執(zhí)行文件,你就可以使用gcc -c 這個選項來完成,在編寫makefile

29、的時候,對于多文件的編譯,經常使用到這個參數。-o這個參數表示鏈接生成可執(zhí)行文件,而且可執(zhí)行文件名稱可以自己取跟在-o后面。-g這個參數在調試方面是比較重要的,如果想要利用gdb調試器對代碼進行調試,就必須加上-g這個參數了。-Wall這個參數是為了顯示所有調試產生的警告,對于減少bug方面,這個參數也是至關重要的,其他還有一些參數,在本設計中未曾用到,就不一一介紹了。</p><p><b>  GD

30、B調試器</b></p><p>  GDB調試器在本設計中,我只是利用它來尋找執(zhí)行產生的段錯誤,其實他的功能遠不止于此。在此我只介紹它定位段錯誤的位置這個功能,其他功能在本次設計中gcc編譯器已經為它代勞了,就不介紹了。如果執(zhí)行的時候發(fā)生了段錯誤,你就可以gdb加上可執(zhí)行文件,進入gdb調試。用list指令就可以列出你所調試的代碼,輸入run就可以開始執(zhí)行你的程序,如果是沒有斷錯誤的情況下,你可以設

31、置斷點來進行調試,但是有斷錯誤的情況下,就不必這么繁瑣了。直接run,它運行到產生段錯誤的地方他就會停下來,它產生的調試信息,一般比較復雜,所以這時不必急著去研究,再輸入where指令,它就會告訴你在哪個函數,哪行產生了段錯誤,但是有的時候它給出的行數是一個十六進制的內存地址,一般是無法確定行數的,這時就可以輸入list指令直接列出產生段錯誤的詳細代碼段。然后就可以直接去源文件的具體位置查看代碼出了什么問題。</p>&l

32、t;p>  主機管理系統(tǒng)整體設計</p><p>  3.1 整體設計概念設計圖</p><p>  圖3-1 整體系統(tǒng)設計概念圖</p><p>  如上圖3-1所示,移動監(jiān)控設備實時通過網絡跟個人PC進行通信,pc主機采集各種運行狀態(tài)的詳細信息,發(fā)送到移動監(jiān)控端。移動監(jiān)控端通過網絡接收到詳細信息打印到屏幕上,并且通過網絡發(fā)送指令到個人PC機,控制PC機的運

33、行。</p><p>  3.2 軟件工作流程圖</p><p>  3.2.1 主機工作流程圖</p><p>  如下圖3-2所示,軟件開始運行,首先初始化控制臺,然后創(chuàng)建線程接受指令,調用recv函數接收。將接收到的數據進行判斷,調用system函數進行指令的執(zhí)行,并且記錄相關信息到日志文件。</p><p>  圖 3-2 主機工作流

34、程圖</p><p>  在主線程中,先判斷控制臺初始化的是否成功,如果成功初始化,就進入相關工作,否則結束工作,記錄錯誤信息。進入正常流程后,先獲取當地實時時間和本地主機ip,顯示在屏幕上,供用戶第一時間可看到。然后依次采集CPU使用率,實時網絡流量狀況,進程運行狀況,內存使用狀況,以及磁盤使用狀況,采集完成一項就及時上傳,記錄成功上傳的記錄,失敗的話就記錄錯誤日志。最后等待一定時間,進行第二次采集上報,實現(xiàn)實

35、時監(jiān)控的目標。</p><p>  3.2.2 監(jiān)控端工作流程圖</p><p>  圖3-3 監(jiān)控端工作流程</p><p>  如上圖3-3所示,軟件啟動首先進入控制臺的初始化,開辟一個線程,用于等待用戶輸入指令去控制主機的運行。一旦用戶輸入指令,就會發(fā)送或者失敗的情況都會記錄相關情況。主線程顯示相關時間和IP信息,然后主動connect主機,連接成功后會等待接

36、收數據,一旦數據到達,就會實時分塊的顯示在屏幕上,以供用戶第一時間可以看到自己主機的運行狀況,第一時間做出判斷控制。</p><p>  主機管理系統(tǒng)模塊實現(xiàn)</p><p><b>  日志記錄模塊實現(xiàn)</b></p><p>  錯誤日志模塊設計的目的是可以快速的了解到系統(tǒng)運行所產生的錯誤信息,準確的判斷系統(tǒng)設計的漏洞和系統(tǒng)崩潰的原因。其次

37、可以準確的掌握系統(tǒng)指令的執(zhí)行狀況和運行狀況。最重要的一個功能就是采集的信息有一塊出現(xiàn)了錯誤,這時就可以通過日志,準確定位到錯誤原因產生的地方。</p><p>  日志文件的指定格式:[時間][模塊名稱][信息][級別]。</p><p>  級別:DEBUG 調試級 NORMAL 普通級 WARN 警告級 ERROR 錯誤級。</p><p><b&

38、gt;  配置文件模塊實現(xiàn)</b></p><p>  配置文件是本系統(tǒng)運行的核心部分,系統(tǒng)要采集的關鍵信息都是從配置文件中讀取的。配置文件包含的內容包含目標主機的ip,端口,待監(jiān)控磁盤的名稱,待監(jiān)控進程的名稱,采集時間間隔等,配置文件中每個名稱之間用逗號隔開,并且遵循一定格式。系統(tǒng)一開始運行,第一件要做的事就是初始化配置文件,把配置文件的內容讀取到鏈表中,保存在內存中,直到整個系統(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)調整進程優(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>  內存使用狀況模塊實現(xiàn)</p&g

44、t;<p>  內存是用來存儲數據的,是一種利用半導體技術做成的電子設備,電子電路的數據是以二進制的方式存儲,存儲器的每一個存儲單元稱做記憶元。存儲器的種類很多,按其用途可分為主存儲器和輔助存儲器,主存儲器又稱內存。</p><p>  linux操作系統(tǒng)的內存使用狀況可以通過/proc/meminfo文件中讀取。這個文件中涉及到三個主要的標志。totalmem代表當前總內存,freemem代表當前

45、空閑內存,totalswap代表當前可用的交換內存,freeswap代表當前可交換的空閑內存。讀出來的內存數據一般是以K為單位的,所以要把它換算成兆。換算的公式是1M=1024KB。</p><p>  網絡流量監(jiān)控模塊實現(xiàn)</p><p>  本模塊主要監(jiān)測當前主機的平均上傳流量的速度和下載速度。網絡流量可以在/proc/net/dev文件獲取當前的總值。我采取分別隔相等的秒數讀取三次流

46、量上傳速度和下載速度并把他們保存在緩存中,最終取三次數值的平均值,計算出平均的上傳速度和下載速度。</p><p><b>  進程監(jiān)控模塊實現(xiàn)</b></p><p>  需要監(jiān)控的關鍵進程是事先寫入到配置文件中的,我們可以從配置文件中讀取待監(jiān)控的關鍵進程,分析出他的關鍵狀態(tài)。如果不采用寫入配置文件的方式進行監(jiān)控進程,那系統(tǒng)運行的進程非常多,采集出來的數據量極大,而

47、且數度復雜度很高,針對性很差,難以起到及時發(fā)現(xiàn)不正常進程的效果。</p><p>  linux操作系統(tǒng)可以通過ps -ef進行對當前系統(tǒng)的所有進程進行查詢。我通過函數popen打開ps -ef這個指令,然后根據配置文件所要求的進程進行逐個對比,符合要求的進程,當即提取出相關信息,保存到緩存中,再繼續(xù)對比讀取,直到配置文件中所有待監(jiān)控進程全部尋找完畢。如果待監(jiān)控進程不存在于當前系統(tǒng),則將他的進程ID設置成-1以做

48、區(qū)別。</p><p><b>  磁盤監(jiān)控模塊實現(xiàn)</b></p><p>  待檢測的磁盤名是從配置文件中讀取的,因為我們的pc機可以掛載多個外接磁盤,全部讀取,針對性差,與本設計初衷不符。linux操作系統(tǒng)的所有磁盤的信息是在/etc/mtab中讀取。我將磁盤的狀態(tài)分成未掛載(0),正常(1),故障(5)。磁盤要采集的信息包括磁盤當前的狀態(tài),磁盤的掛載路徑,磁盤

49、的類型,磁盤的塊大小,磁盤的總大小,磁盤的空閑大小等。這些信息采集出來可以在本地pc機上通過指令查看,同時也會發(fā)送給遠端監(jiān)控端。</p><p><b>  網絡通信模塊設計</b></p><p>  TCP網絡協(xié)議的介紹</p><p>  本設計網絡通信主要是基于TCP網絡協(xié)議實現(xiàn)的,首先詳細介紹下TCP網絡協(xié)議。TCP是一種面向連接的,

50、可靠的,基于字節(jié)流的傳輸層的通信協(xié)議。TCP/ip協(xié)議遵循四層的一個模型,分別是應用層,傳輸層,互聯(lián)層,網絡接口層。與之對應的是OSI模型,它的物理層,表示層,會話層其實是對應于四層模型的應用層。OSI的傳輸層對應于四層模型的TCP/UDP層,OSI的網絡層對應于四層模型的IPV4,IPV6地址,OSI的數據鏈路層和物理層其實就是對應與四層模型的網絡介質層。下圖4-1是這兩個模型的圖形表示,看起來會比較直觀。</p>&l

51、t;p><b>  圖4-1模型對比</b></p><p>  TCP協(xié)議數據進入協(xié)議棧時的封裝如下圖4-2所示:</p><p>  圖4-2 TCP協(xié)議入棧數據封裝</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>  其次本設計采用的目標連接是基于IPV4類型的IP地址的,IP地址分為IPV4和IPV6兩種類型,目前廣泛采用的是IPV4地址,目前的主流IP地址基本都是采用IPV4的,但是IP

53、V4地址的數量有限,隨著電腦的不斷普及和網絡的擴張,下面詳細介紹IPV4地址族的分類和子網劃分。</p><p>  A類IP地址由1字節(jié)的網絡地址和3字節(jié)主機地址組成,網絡地址的最高位必須是“0”, 地址范圍1.0.0.1-126.255.255.254??捎玫腁類網絡有126個,每個網絡能容納1677214個主機。 </p><p>  B類IP地址由2個字節(jié)的網絡地址和2個字節(jié)的

54、主機地址組成,網絡地址的最高位必須是“10”,地址范圍128.1.0.1-191.255.255.254。可用的B類網絡有16384個,每個網絡能容納65534主機 。</p><p>  C類IP地址由3字節(jié)的網絡地址和1字節(jié)的主機地址組成,網絡地址的最高位必須是“110”。范圍192.0.1.1-223.255.255.254。C類網絡可達2097152個,每個網絡能容納254個主機。</p>

55、<p>  D類IP地址第一個字節(jié)以“1110”開始,它是一個專門保留的地址。它并不指向特定的網絡,目前這一類地址被用在多點廣播(Multicast)中。多點廣播地址用來一次尋址一組計算機,它標識共享同一協(xié)議的一組計算機。地址范圍224.0.0.1-239.255.255.254。</p><p>  E類IP地址第一個字節(jié)以“1111”開始,為將來使用保留。E類地址保留,僅作實驗和開發(fā)用。全零(“0.

56、0.0.0”)地址指任意網絡。全“1”的IP(“255.255.255.255”)是當前子網的廣播地址。</p><p><b>  網絡連接過程實現(xiàn)</b></p><p>  在監(jiān)控端,調用socket函數初始化一個套接字,調用connect函數進行主動連接,重復嘗試連接多次。在服務端,也是調用socket函數初始化一個套接字,調用bind函數綁定一個本地ip地址

57、,綁定成功后調用listen函數進行連接監(jiān)聽。監(jiān)聽成功后,調停accept函數進行連接等待,使用select設置等待超時時間。</p><p>  主機管理系統(tǒng)的系統(tǒng)調試</p><p><b>  主機系統(tǒng)調試方法</b></p><p>  開啟PC端的采集發(fā)送程序,查看確認待監(jiān)控的項目后,配置好網絡地址和端口后,啟動等待監(jiān)控端的連接。注意

58、觀察監(jiān)控端的連接超時等待次數。發(fā)現(xiàn)多次重連以后依舊無法建立連接,采取了關閉軟件進行網絡的調試,互相PING對方的IP地址,發(fā)現(xiàn)無法PING通,確認為網絡設置出現(xiàn)問題,重新配置了網關和IP地址以后成功解決了連接問題。</p><p>  開啟移動端電源,運行移動端的監(jiān)控程序,配置好網絡地址和端口后,啟動主動連接。三路握手成功后,數據會陸續(xù)發(fā)送到移動監(jiān)控端,注意觀察LCD液晶屏幕的數據顯示,仔細核實數據,記錄丟包和漏

59、發(fā)的項目。斷開連接,查看日志文件的重要信息和錯誤日志,并作分析,進行進一步的改進。調試發(fā)現(xiàn)在斷開后有時會出現(xiàn)不穩(wěn)定現(xiàn)象,一端斷開了以后,另一端會進入非正常工作。后來添加了斷開判斷機制,設置斷開標志位進行判斷處理,成功解決了這個問題。</p><p><b>  主機系統(tǒng)調試結果</b></p><p>  經測試,數據收發(fā)基本正常,LCD屏幕顯示合理有序,基本在允許的

60、誤差之內。具體數據如下圖所示:</p><p>  圖5-1 內存狀況數據</p><p>  如上圖5-1所示,顯示的為當前電腦的內存使用狀況。數據表明剩余內存比較少,說明當前電腦開啟的應用過多,消耗了大量內存,用戶應該適當的關閉一些不使用的應用來釋放內存,緩解電腦的內存壓力,減少對電腦的損傷。</p><p>  圖5-2 進程運行狀況</p>&

61、lt;p>  如上圖5-2所示,顯示為當前主要監(jiān)控的進程的運行狀況的數據,上圖顯示進程ID為-1的表明當前監(jiān)控的進程已經退出或者意外關閉。</p><p>  5-3 CPU使狀況</p><p>  如上圖5-3所示,顯示為當前CPU的使用情況,當前電腦CPU使用率為百分之三,屬于比較正常的情況,說明當前電腦運行基本穩(wěn)定。</p><p>  圖 5-4 實

62、時流量速度狀況</p><p>  如上圖5-4所示,顯示為當前電腦實時流量上傳和下載速度的使用狀況。上面數據表明當前主機沒有從網絡上面下載數據包,以28KB每秒的速度再從網絡上下載數據包,當前網速偏慢或者表明下載的資源稀少,導致下載速度過慢。</p><p><b>  圖 5-5 指令</b></p><p>  如上圖5-5所示,clea

63、n表示清屏指令,show可以顯示相關信息, start表示開始發(fā)送運行狀況信息,ls代表打印所有命令, quit表示結束整個軟件運行,change是改變配置文件信息。</p><p>  圖5-6 磁盤運行狀況</p><p>  如上圖5-6所示,顯示為當前電腦磁盤的使用狀況。上面數據,顯示磁盤大小為0的,說明待監(jiān)控的磁盤狀態(tài)不正確,可能是配置的時候磁盤名輸入錯誤,導致無法正確讀取,或者

64、待檢測的磁盤已經被拔出,處于為掛載狀態(tài)。</p><p>  圖5-7開始連接主機</p><p>  如上圖5-7所示,顯示為當前開始TCP網絡連接時的狀況。上圖表明,當前的網絡狀況是不通的,無法進行網絡連接。</p><p><b>  結果分析</b></p><p>  本次設計經過設計,實現(xiàn),調試最終圓滿完成,

65、經調試,采集出來的數據基本符合實際情況,連接發(fā)送情況基本正常。經過多次運行測試,基本每次都能穩(wěn)定運行,網絡連接基本穩(wěn)定。但是設計和調試中也碰到了比較多的問題,首先連接斷開后,沒有很好的進行斷開處理,會產生大量錯誤信息,后來經多次實驗,加上斷開連接判斷,很好地解決了這個問題。有些數據量比較大,比如說進程相關數據,磁盤相關數據,會產生大量的數據,在屏幕上一次性顯示有一定的困難,所以這兩塊數據的顯示不是很直觀。其他功能基本與設計目標符合。&l

66、t;/p><p><b>  結論和展望</b></p><p>  本次畢業(yè)設計經過調試,采集到的數據和效果,基本符合預先設計的需求,功能穩(wěn)定,使用也還直觀方便,具有一定的實際意義。由于本人掌握的知識有限,設計雖已完成,但其中有很多不足,為了完成這次設計,在幾個月內,認真收集有關資料并做相關的整理和閱讀,為這次的設計做好充分的準備。經過這次畢設,我體會到了以下幾點心得,

67、1.不論做什么,都要做好充分準備,不應盲目隨意的為完成任務而完成而學習。2.通過學習,使我對硬件設計和各模塊的功能有了更深的了解,同時提高了動手能力。3.通過學習,加強了我寫代碼的能力,培養(yǎng)了良好的編程習慣,擴展了知識層面。在以后的學習生涯中,還需要不斷地努力和進步,爭取達到新的高度。</p><p>  雖然已經順利的實現(xiàn)了預計的功能,但是本次設計的移動主機管理系統(tǒng)還有很大的提升空間,還能有更好的發(fā)展前景。本次

68、設計只是實現(xiàn)了點對點的移動監(jiān)控,一個移動設備只是單一的監(jiān)控了一臺電腦,局限性比較大,將來可以進行改進,實現(xiàn)一對多監(jiān)控,還可以實現(xiàn)任意選擇監(jiān)控任意一臺你想監(jiān)控的電腦,可以在一個區(qū)域內實現(xiàn)電腦ip地址的廣播,只要你知道主機的用戶名和密碼,就可以實施對他的監(jiān)控,如果實現(xiàn)諸如此類的完善,那本設計的功能將會變得更加完善和強大,發(fā)展前景將會一片廣闊。 </p><p><b>  參考文獻</b>&

69、lt;/p><p>  蔚敏, 偉民. 數據結構[M]. 北京:清華大學出版社,1992.</p><p>  邵平凡, 徐霖. 基于 Qt 的嵌入式 GUI 開發(fā)的應用研究[J]. 工業(yè)控制計算機,2011, 24(10): 49-51.</p><p>  鳥哥, 許偉, 林彩娥. 鳥哥的 Linux 私房菜: 第二版. 基礎學習篇[M]. 北京:人民郵電出版社,2

70、007.</p><p>  芬納, 魯多夫, 楊繼張. UNIX 網絡編程: 套接口 API. 第 1 卷[M]. 北京:清華大學出版社有限公司,2006.</p><p>  Stevens W R. UNIX 環(huán)境高級編程: 英文版[M]. 北京:機械工業(yè)出版社,2002.</p><p>  宋海民. C 語言程序設計[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]; //服務器ip地址</p><p>  int serverPort; //服務端口</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結構體指針</p><p>  *返回:讀取成功返回CFG結構體指針,失敗返回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>  *參數: 無</b></

86、p><p>  *返回:讀取成功成功返回當前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>  結構體</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>  *功能:獲取內存使用狀況</p><p>  *mem:內存結構體指針</p><p>  *返回:成功返回0,失敗返回-1</p><p><b>  *

91、/</b></p><p>  extern int GetMeminfo(MEM *mem); //獲取內存信息</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>  *參數:日志信息,時間,模塊名稱,日志級別,日志內容</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ū)設備名</p><p>  char mountPort[128]; //磁盤分區(qū)掛載路徑</p><p>  char fstype[16]; //文件系統(tǒng)格式</p><p>  lon

103、g file_block;//文件總數</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結構體</p><p&g

109、t;  *mountport:掛載路徑</p><p>  *files:文件數</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>  *功能:獲取網絡流量速度</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: 流量信息結構體指針</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//有關命令描述長度</p><p>  #define CMD_NUM6//命令數目(根據自己的需要去更改個數)</p><p>  #define PROMPT"

121、[my-control] #" //控制終端顯示符</p><p><b>  //命令結構體</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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論