freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c基于局域網(wǎng)linux環(huán)境下的心跳檢測系統(tǒng)實(shí)現(xiàn)(doc畢業(yè)設(shè)計(jì)論文)-在線瀏覽

2024-08-08 07:57本頁面
  

【正文】 日趨成熟化。我相信,在當(dāng)今IT技術(shù)的推動(dòng)下,心跳檢測在未來幾年會(huì)有更廣闊的發(fā)展空間。并對(duì)里面涉及的技術(shù)原理,設(shè)計(jì)思想進(jìn)行了相關(guān)討論。這些節(jié)點(diǎn)和網(wǎng)絡(luò)隨時(shí)可能發(fā)生故障,從而導(dǎo)致部分節(jié)點(diǎn)或者網(wǎng)絡(luò)癱瘓。如果用人力去監(jiān)控,則會(huì)造成很大的開銷,且節(jié)點(diǎn)是否癱瘓有時(shí)無法從外表判斷。心跳檢測技術(shù)是分布式嵌入式系統(tǒng)中一種常見的故障檢測方法。如果過一段時(shí)間之后,主控節(jié)點(diǎn)沒有收到外圍節(jié)點(diǎn)的心跳報(bào)文,則認(rèn)為此節(jié)點(diǎn)或相關(guān)網(wǎng)絡(luò)出現(xiàn)故障,并向管理員報(bào)告。用于檢測網(wǎng)絡(luò)的異常斷開。一般是客戶端,服務(wù)器也可以定時(shí)輪詢發(fā)心跳下去(我的系統(tǒng)是采用客戶端發(fā)報(bào)文)。如果服務(wù)端在規(guī)定時(shí)間內(nèi)沒有收到客戶端信息則視連接斷開。由于該設(shè)計(jì)主要是針對(duì)10臺(tái)左右的小范圍的局域網(wǎng)設(shè)計(jì)的心跳檢測系統(tǒng),沒有涉及到數(shù)據(jù)庫存儲(chǔ)的相關(guān)知識(shí),因此該系統(tǒng)的優(yōu)點(diǎn)是所需要的硬件代價(jià)小,實(shí)現(xiàn)起來的網(wǎng)絡(luò)連接相對(duì)簡單,能針對(duì)自己組建的局域網(wǎng)來測試。我相信,我今后在學(xué)習(xí)更多網(wǎng)絡(luò)故障檢測技術(shù)和網(wǎng)絡(luò)編程技術(shù)后,會(huì)將上述功能一一實(shí)現(xiàn)。而后每隔一秒發(fā)送一次心跳報(bào)文,主控節(jié)點(diǎn)根據(jù)心跳報(bào)文來檢測網(wǎng)絡(luò)連接是否正常。最后大致介紹了我自己設(shè)計(jì)的心跳檢測系統(tǒng)的一些情況,包括優(yōu)缺點(diǎn)和大致的實(shí)現(xiàn)情況。Linux操作系統(tǒng)的內(nèi)核的名字也是“Linux”。嚴(yán)格來講,Linux這個(gè)詞本身只表示Linux內(nèi)核,但在實(shí)際上人們已經(jīng)習(xí)慣了用Linux來形容整個(gè)基于Linux內(nèi)核,并且使用GNU 工程各種工具和數(shù)據(jù)庫的操作系統(tǒng)。當(dāng)時(shí)他是芬蘭赫爾辛基大學(xué)的學(xué)生。出于愛好,他根據(jù)可在低檔機(jī)上使用的MINIX設(shè)計(jì)了一個(gè)系統(tǒng)核心Linux ,但沒有使用任何MINIX或UNIX的源代碼。Linux以它的靈活性和高效性著稱。具有多任務(wù)、多用戶的能力。Linux不僅僅包括完整的操作系統(tǒng),還包括文本編輯器、高級(jí)語言編譯器等應(yīng)用軟件。目前,linux能夠運(yùn)用于各種版本的cpu的計(jì)算機(jī)上,還能運(yùn)用于一些手持設(shè)備,比如說,PDA,游戲機(jī),手機(jī),嵌入式產(chǎn)品等等。 絕大多數(shù)基于Linux內(nèi)核的操作系統(tǒng)使用了大量的GNU軟件,包括了shell程序、工具、程序庫、編譯器及工具,還有許多其他程序,例如Emacs。其中第一條詳細(xì)來講就是系統(tǒng)中的所有都?xì)w結(jié)為一個(gè)文件,包括命令、硬件和軟件設(shè)備、操作系統(tǒng)、進(jìn)程等等對(duì)于操作系統(tǒng)內(nèi)核而言,都被視為擁有各自特性或類型的文件。Linux的優(yōu)點(diǎn)集中體現(xiàn)在以下幾點(diǎn):低廉性:基于其低廉成本與高度可設(shè)定性,Linux常常被應(yīng)用于嵌入式系統(tǒng),例如機(jī)頂盒、移動(dòng)電話及行動(dòng)裝置等。廣泛性:基于Linux的開源性給人們帶來的巨大誘惑,Linux的的應(yīng)用越來越廣,Linux社區(qū)的人員的增多,致使基于Linux的開發(fā)越來越方便容易。而在表列的500套系統(tǒng)里,采用Linux為操作系統(tǒng)的,占了371組(%),其中的前十位者,有7組是使用Linux的。靈活性:Linux以它的高效性和靈活性著稱。Linux是在GNU公共許可權(quán)限下免費(fèi)獲得的,是一個(gè)符合POSIX標(biāo)準(zhǔn)的操作系統(tǒng)。它還包括帶有多個(gè)窗口管理器的XWindow圖形用戶界面,如同我們使用Windows NT一樣,允許我們使用窗口、圖標(biāo)和菜單對(duì)系統(tǒng)進(jìn)行操作。第二節(jié) GCC簡介一、 什么是GCCGCC是GNU公社的一個(gè)項(xiàng)目。最初,GCC只是一個(gè)C語言編譯器,它是GNU C Compiler 的英文縮寫。其中包括 C,C++,Ada,Object C和Java等。也就是 GNU編譯器家族的意思。直到現(xiàn)在,GCC的歷史仍然在繼續(xù),它的傳奇仍然被人所傳頌。二、GCC的基本規(guī)則  gcc所遵循的部分約定規(guī)則:   .c為后綴的文件,C語言源代碼文件;   .a為后綴的文件,是由目標(biāo)文件構(gòu)成的檔案庫文件;   .C,. 為后綴的文件,是C++源代碼文件;   .h為后綴的文件,是程序所包含的頭文件;   .i 為后綴的文件,是已經(jīng)預(yù)處理過的C源代碼文件;   .ii為后綴的文件,是已經(jīng)預(yù)處理過的C++源代碼文件;   .m為后綴的文件,是ObjectiveC源代碼文件;   .o為后綴的文件,是編譯后的目標(biāo)文件;   .s為后綴的文件,是匯編語言源代碼文件; .S為后綴的文件,是經(jīng)過預(yù)編譯的匯編語言源代碼文件。GCC編譯器的調(diào)用參數(shù)大約有100多個(gè),其中多數(shù)參數(shù)我們可能根本就用不到,這里只介紹其中最基本、最常用的參數(shù)。   c,只編譯,不連接成為可執(zhí)行文件,通常用于編譯不包含主程序的子程序文件。如果不給出這個(gè)選項(xiàng)。   O,對(duì)程序進(jìn)行優(yōu)化編譯、連接,采用這個(gè)選項(xiàng),整個(gè)源代碼會(huì)在編譯、連接過程中進(jìn)行優(yōu)化處理,這樣產(chǎn)生的可執(zhí)行文件的執(zhí)行效率可以提高,但是,編譯、連接的速度就相應(yīng)地要慢一些。   Idirname,將dirname所指出的目錄加入到程序頭文件目錄列表中,是在預(yù)編譯過程中使用的參數(shù)。對(duì)于A類,預(yù)處理程序cpp在系統(tǒng)預(yù)設(shè)包含文件目錄(如/usr/include)中搜尋相應(yīng)的文件,而B類,預(yù)處理程序在目標(biāo)文件的文件夾內(nèi)搜索相應(yīng)文件。接著調(diào)用cc1進(jìn)行編譯。當(dāng)所有的目標(biāo)文件都生成之后,gcc就調(diào)用ld來完成最后的關(guān)鍵性工作,這個(gè)階段就是連接。第三節(jié) linux下的網(wǎng)絡(luò)編程技術(shù)一、socket編程介紹在介紹心跳檢測的詳細(xì)設(shè)計(jì)之前,首先介紹linux下的網(wǎng)絡(luò)程序設(shè)計(jì)方法。socket編程有字節(jié)流和數(shù)據(jù)報(bào)兩種主要類型,分別對(duì)應(yīng)TCP協(xié)議和UDP協(xié)議。數(shù)據(jù)報(bào)socket定義了一種無連接的服務(wù),數(shù)據(jù)通過相互獨(dú)立的報(bào)文進(jìn)行傳輸,是無序的,并且無法保證可靠無差錯(cuò)。下面就是本系統(tǒng)所用到的socket編程函數(shù): 創(chuàng)建套接字:int socket( int domain, int type, int protocol )?! omain:指定應(yīng)用程序使用的通信協(xié)議的協(xié)議族,對(duì)于TCP/IP協(xié)議族,該參數(shù)置AF_INET。該函數(shù)如果調(diào)用成功就返回新創(chuàng)建的套接字的描述符,套接字描述符是一個(gè)整數(shù)類型的值;如果失敗就返回1。socket:由socket()調(diào)用返回的套接字描述符;addreess:結(jié)構(gòu)指針指向了與協(xié)議名稱和協(xié)議相關(guān)的信息;address_len:指明了address數(shù)據(jù)結(jié)構(gòu)的大小。 等待客戶端連接服務(wù)器端應(yīng)用軟件通過調(diào)用accept()函數(shù)將自身阻塞,直至有新的客戶端連接。socket:創(chuàng)建并綁定的套接字。如果調(diào)用成功,則返回非負(fù)的連接套接字;否則返回1,并設(shè)置錯(cuò)誤代碼到errno。include sys/int connect(int socket, const struct sockaddr *address, size_t address_len)。如果調(diào)用成功,返回0;否則返回1,并設(shè)置錯(cuò)誤代碼到errno。includesys/ssize_t sendto(int socket,const void*message,size_t length,int flags,const struct sockaddr*dest_addr,socklen_t dest_len);socket:已經(jīng)創(chuàng)建的套接字;message:指明要發(fā)送的數(shù)據(jù)包的地址;length:數(shù)據(jù)包大??;flags:設(shè)置發(fā)送的屬性,一般可設(shè)置為0;dest_addr:指明目的端的IP地址和端口號(hào);dest_len:指明dest_addr數(shù)據(jù)結(jié)構(gòu)的大小。 UDP協(xié)議的接收數(shù)據(jù)UDP協(xié)議需要通過recvfrom()函數(shù)接收一個(gè)數(shù)據(jù)包。如果調(diào)用成功,返回實(shí)際發(fā)送的數(shù)據(jù)數(shù)目;否則返回1,并設(shè)置錯(cuò)誤代碼到errno。include sys/ssize_t send(int socket, const char void* buffer, int length, int flags)。 從一個(gè)已連接的套接口接收數(shù)據(jù)。socket:一個(gè)標(biāo)識(shí)已連接套接口的描述字;buffer:用于接收數(shù)據(jù)的緩沖區(qū);length:緩沖區(qū)長度;flags:指定調(diào)用方式;若無錯(cuò)誤發(fā)生,recv()返回讀入的字節(jié)數(shù)。 IP地址的轉(zhuǎn)換和獲取在上述套接字程序設(shè)計(jì)中,服務(wù)器和客戶端的IPV4地址采用了32為無符號(hào)整數(shù)表示。Linux操作系統(tǒng)提供了一系列函數(shù)實(shí)現(xiàn)這幾種格式之間的轉(zhuǎn)換。cp:指向十進(jìn)制字符串表示的IPV4地址。 gethostbyname()函數(shù)可以實(shí)現(xiàn)從主機(jī)名稱到32位無符號(hào)整數(shù)表示的轉(zhuǎn)換。 char **h_aliases。 int h_length。}struct hostent *gethostbyname(const char *name)。如果調(diào)用成功,返回指向hostent的指針;否則返回NULL,并設(shè)置錯(cuò)誤代碼到h_erno。H_addr_list指明了主機(jī)的所有網(wǎng)絡(luò)地址。 gethostbyaddr()函數(shù)可以實(shí)現(xiàn)從32為無符號(hào)整數(shù)到主機(jī)名稱的轉(zhuǎn)換。addr:指明了32位無符號(hào)整數(shù)表示的IPv4地址;len:指明了地址長度;type:在Ipv4協(xié)議下,可以設(shè)置為AF_INET。 線程創(chuàng)建函數(shù)includeint pthread_create(pthread_t *thread,pthread_ayyr_t *attr,void*(*start_routine)(void *),void *arg)thread:這是一個(gè)指向pthread_t類型數(shù)據(jù)的指針。attr:這個(gè)參數(shù)一般用于設(shè)置線程的屬性,我們一般不需要設(shè)置特殊的屬性,所以可以簡單的設(shè)置該參數(shù)為NULL。arg:這個(gè)參數(shù)將傳遞啟動(dòng)函數(shù)的參數(shù) 。在服務(wù)器端首先使用socket()函數(shù)創(chuàng)建套接字,然后使用bind()函數(shù)將本機(jī)IP地址和服務(wù)端口綁定至套接字,并通過listen()函數(shù)建立等待隊(duì)列,隨后就可以使用accept()函數(shù)等待客戶端的連接。該函數(shù)將返回一個(gè)新的套接字值,隨后服務(wù)器就可以通過新的套接字接口與連接上的客戶端利用rend()或write()函數(shù)進(jìn)行交互。連接成功后,就可以通過read()或者write()函數(shù)與服務(wù)器進(jìn)行數(shù)據(jù)交互了。首先通信雙方都要利用socket()函數(shù)創(chuàng)建套接字,然后將本機(jī)IP地址和端口通過bind()函數(shù)與套接字綁定。使用recvfrom()函數(shù)可以接收指定端口的UDP包,并通過返回的address結(jié)構(gòu)獲知發(fā)送方的IP地址和端口號(hào)。GCC是一款開源的編譯器,有強(qiáng)大的編譯調(diào)試的能力,使本系統(tǒng)的開發(fā)、測試,輕松了很多。第三章 系統(tǒng)的分析與設(shè)計(jì)第一節(jié) 需求分析一、問題定義本系統(tǒng)的問題概述如下:基本問題是linux以及網(wǎng)絡(luò)編程的研究,基本目標(biāo)是設(shè)計(jì)一個(gè)基于linux環(huán)境的心跳檢測的系統(tǒng)來判斷局域網(wǎng)的網(wǎng)絡(luò)連接是否正常。一般情況下,主要從技術(shù)可行性、經(jīng)濟(jì)可行性和操作可行性三個(gè)方面論證系統(tǒng)開發(fā)的可行性。其次,設(shè)計(jì)開發(fā)這樣的一款心跳檢測系統(tǒng)只需要幾臺(tái)電腦構(gòu)成局域網(wǎng)就可以使用。所用的函數(shù)包基本一致,再加上gcc的強(qiáng)大編譯、調(diào)試的功能,對(duì)完成這個(gè)系統(tǒng)由很大幫助。幸運(yùn)的是,通過查閱大量豐富的技術(shù)資料,我有信心解決這一問題。通過以上分析,可以很確定這一系統(tǒng)的可行性,可以放心地開始下一階段的任務(wù)了。主控節(jié)點(diǎn)功能 主控節(jié)點(diǎn)是系統(tǒng)的關(guān)鍵部分,它負(fù)責(zé)接收登錄報(bào)文和心跳報(bào)文,然后根據(jù)報(bào)文的內(nèi)容來判斷網(wǎng)絡(luò)連接情況,可以說本系統(tǒng)的主要功能基本上由主控節(jié)點(diǎn)完成:完成接收心跳報(bào)文功能主控節(jié)點(diǎn)收到外圍節(jié)點(diǎn)的登錄報(bào)文后,就完成對(duì)外圍節(jié)點(diǎn)信息的注冊(cè),包括外圍節(jié)點(diǎn)的設(shè)備號(hào)和分配的槽口號(hào)等,并將槽口號(hào)返回給外圍節(jié)點(diǎn)。完成定期檢查外圍節(jié)點(diǎn)功能 主控節(jié)點(diǎn)要定期檢查外圍節(jié)點(diǎn)注冊(cè)表,從而發(fā)現(xiàn)節(jié)點(diǎn)是否正常工作,如果不正常就報(bào)告響應(yīng)的故障消息。其目的只是描繪出軟件的總體框架,根據(jù)功能、性能需求和數(shù)據(jù)需求導(dǎo)出軟件的數(shù)據(jù)結(jié)構(gòu)和系統(tǒng)結(jié)構(gòu)。采用模塊化原理可以使軟件結(jié)構(gòu)清晰,降低了系統(tǒng)的復(fù)雜性,使系統(tǒng)容易設(shè)計(jì)、容易修改,而且其推動(dòng)了系統(tǒng)各部分的并行開發(fā),提高了軟件的生產(chǎn)效率。② 抽象化在對(duì)軟件系統(tǒng)進(jìn)行模塊設(shè)計(jì)時(shí),可以有不同的抽象層次,系統(tǒng)設(shè)計(jì)過程中的每一步都是對(duì)軟件問題解法的又一次更高級(jí)抽象。二、心跳檢測系統(tǒng)的整體結(jié)構(gòu)圖使用上節(jié)所提到的模塊化等設(shè)計(jì)思想,先是對(duì)外圍節(jié)點(diǎn)的發(fā)送報(bào)文的流程進(jìn)行了設(shè)計(jì),然后說對(duì)主控節(jié)點(diǎn)的完成外圍節(jié)點(diǎn)注冊(cè),完成接收心跳報(bào)文,完成定期檢查外圍節(jié)點(diǎn)三個(gè)功能進(jìn)行了一一的設(shè)計(jì),下面是整個(gè)程序的結(jié)構(gòu)圖。整個(gè)心跳檢測系統(tǒng)包括外圍節(jié)點(diǎn)和主控節(jié)點(diǎn)兩個(gè)部分。主控節(jié)點(diǎn)在接收到外圍節(jié)點(diǎn)的注冊(cè)報(bào)文后,將回送許可報(bào)文。如果外圍節(jié)點(diǎn)在5秒內(nèi)沒有連接到主控節(jié)點(diǎn),或者發(fā)出注冊(cè)報(bào)文后5秒內(nèi)沒有收到主控節(jié)點(diǎn)的許可報(bào)文,則睡眠10秒鐘后重新與主控節(jié)點(diǎn)進(jìn)行連接。主控節(jié)點(diǎn)每隔1秒查詢各個(gè)節(jié)點(diǎn)的心跳報(bào)文,如果在1秒內(nèi)沒有收到外圍節(jié)點(diǎn)的心跳報(bào)文,則顯示相應(yīng)外圍節(jié)點(diǎn)的網(wǎng)絡(luò)連接出現(xiàn)問題。這是由于TCP協(xié)議可以保證傳輸?shù)目煽啃院晚樞蛐裕沁\(yùn)行開銷比較高,而UDP協(xié)議雖然是一中不可靠的協(xié)議,但是傳輸開銷比較小。第三節(jié) 詳細(xì)設(shè)計(jì) 詳細(xì)設(shè)計(jì)是該系統(tǒng)的重點(diǎn)部分,介紹了系統(tǒng)具體是如何實(shí)現(xiàn)的,包括了心跳注冊(cè)表的設(shè)計(jì),報(bào)文格式的設(shè)計(jì),主控節(jié)點(diǎn)和外圍節(jié)點(diǎn)功能的設(shè)計(jì)。而此后,主控節(jié)點(diǎn)在接收到外圍節(jié)點(diǎn)的心跳報(bào)文后,也要相應(yīng)的修改心跳注冊(cè)表,判斷節(jié)點(diǎn)是否出現(xiàn)故障也是通過掃描心跳注冊(cè)表得知,所以這是個(gè)很關(guān)鍵的設(shè)計(jì)。 char flag。 struct sockaddr_in addr。define HEART_BEAT_TABLE_SIZE 64static struct Heart_Beat hb_table[HEART_BEAT_TABLE_SIZE]。flagflag在主控節(jié)點(diǎn)接收到外圍節(jié)點(diǎn)的心跳報(bào)文后設(shè)置為1,在檢測心跳表判斷設(shè)備是否工作時(shí)重新設(shè)置為0,用于標(biāo)記外圍節(jié)點(diǎn)是否壞掉。sockaddr_in addrsockaddr_in addr是外圍節(jié)點(diǎn)的IP地址。其中前兩者通過TCP協(xié)議發(fā)送,后者通
點(diǎn)擊復(fù)制文檔內(nèi)容
電大資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1