版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
計算機網(wǎng)絡(luò)課程設(shè)計報告題目:RIP協(xié)議路由表調(diào)整算法的實現(xiàn)問題描述通過已知的網(wǎng)絡(luò)的拓撲結(jié)構(gòu),使用C++程序來模擬路由器的相互學(xué)習(xí)的過程。使每相鄰的兩個路由器相互學(xué)習(xí)。通過相鄰的路由器的路由表來更新自己的路由表。從而來達到相互學(xué)習(xí)的目的。概要設(shè)計使用二維數(shù)組存儲路由表的目的網(wǎng)絡(luò)、距離、下一跳等信息。使用文本文檔存儲各個路由器的網(wǎng)絡(luò)拓撲,初始化時只包含相鄰路由。使用構(gòu)造函數(shù)實現(xiàn)路由表的初始化操作。圖1路由表得初始化設(shè)計算法,實現(xiàn)路由表的調(diào)整。圖2路由表調(diào)整算法使用循環(huán)算法實現(xiàn)路由表的更新。抽象數(shù)據(jù)類型定義如下:classRoute{public: string route;/*路由器名稱*/ string net_right;/*右接口*/ string net_left;/*左接口*/};/*路由表*/classRoutelists{public: string net;/*目的網(wǎng)絡(luò)*/ int distance;/*距離*/ string next_route;/*下一跳*/};classNetwork{public: Network(); voidshow(); voidbgroutes(); voidchange(inti); voidchange2(inti); voidupdate(inti,intj); voidUPDATE(); boolneighbor(inti,intj); Routelists rts[20][12]; Route rt[20];private: int n,n1; int tiaomu[20];/*各個路由器的路由條目*/ int add[20];/*各個路由器新增加的路由條目*/};詳細設(shè)計代碼如下:#include<iostream>#include<fstream>#include<string>#include<sstream>#include<windows.h>usingnamespacestd;classRoute{public: string route;/*路由器名稱*/ string net_right;/*右接口*/ string net_left;/*左接口*/};/*路由表*/classRoutelists{public: string net;/*目的網(wǎng)絡(luò)*/ int distance;/*距離*/ string next_route;/*下一跳*/};classNetwork{public: Network(); voidshow(); voidbgroutes(); voidchange(inti); voidchange2(inti); voidupdate(inti,intj); voidUPDATE(); boolneighbor(inti,intj); Routelists rts[20][12]; Route rt[20];private: int n,n1; int tiaomu[20];/*各個路由器的路由條目*/ int add[20];/*各個路由器新增加的路由條目*/};/*構(gòu)造函數(shù)*/Network::Network(){ cout<<"請輸入路由器個數(shù):"; cin>>n;/*輸入路由器個數(shù)*/ n1=n; for(intj=0;j<20;j++) { tiaomu[j] =0; add[j] =0; } ifstreaminfile("data.txt",ios::in); if(!infile) { cerr<<"打開網(wǎng)絡(luò)拓撲結(jié)構(gòu)文件失??!請創(chuàng)建data.txt文件后重試!"<<endl; exit(1); } inti=0; while(n1--) { infile>>rt[i].net_left>>rt[i].route>>rt[i].net_right; i++; } infile.close();}/*初始化路由表*/voidNetwork::bgroutes(){ for(inti=0;i<n;i++) { rts[i][0].net =rt[i].net_left; rts[i][0].distance =1; rts[i][0].next_route ="直接交付"; tiaomu[i]++; rts[i][1].net =rt[i].net_right; rts[i][1].distance =1; rts[i][1].next_route ="直接交付"; tiaomu[i]++; }}/*顯示所有路由表*/voidNetwork::show(){ for(inti=0;i<n;i++) { cout<<""<<rt[i].route<<"的路由表:"<<endl; cout<<"目的網(wǎng)絡(luò)距離下一跳"<<endl; for(intj=0;j<tiaomu[i];j++) { cout<<""<<rts[i][j].net<<""<<rts[i][j].distance<<""<<rts[i][j].next_route<<endl; } cout<<endl; } cout<<endl; cout<<endl; cout<<endl;}/*對相鄰路由表,距離加1,下一跳變?yōu)樵撀酚擅?/voidNetwork::change(inti){ for(intj=0;j<tiaomu[i];j++) { rts[19][j].distance =rts[i][j].distance; rts[19][j].next_route =rts[i][j].next_route; rts[i][j].distance =rts[i][j].distance+1; rts[i][j].next_route =rt[i].route; }}/*將改變后的路由表變回來*/voidNetwork::change2(inti){ for(intj=0;j<n+1;j++) { rts[i][j].distance =rts[19][j].distance; rts[i][j].next_route =rts[19][j].next_route; }}/*對一個路由表進行更新操作*/voidNetwork::update(inti,intj){ int x,y; int s1; bool you=true; /*若原來的路由表中沒有相同的目的網(wǎng)絡(luò)N,則把該項目添加到路由表中。*/ for(x=0;x<tiaomu[i];x++) { for(y=0;y<tiaomu[j];y++) { if((rts[i][x].net)!=(rts[j][y].net)) { for(intt=0;t<tiaomu[i];t++) { if((rts[i][t].net)==(rts[j][y].net)) you=false; } if(you) { rts[i][tiaomu[i]].net =rts[j][y].net; rts[i][tiaomu[i]].distance =rts[j][y].distance; rts[i][tiaomu[i]].next_route =rts[j][y].next_route; tiaomu[i]++; add[i]++; } } you=true; } }/*有相同的目的網(wǎng)絡(luò),如果下一跳相同,則直接加入*/ for(x=0;x<tiaomu[i]-add[i];x++) { for(y=0;y<tiaomu[j];y++) { if((rts[i][x].net)==(rts[j][y].net)) if((rts[i][x].next_route)==(rts[j][y].next_route)) { rts[i][x].net =rts[j][y].net; rts[i][x].distance =rts[j][y].distance; } } }/*有相同的目的網(wǎng)絡(luò),如果下一跳不相同,比較距離,小的加入*/ you=true; for(x=0;x<tiaomu[i]-add[i];x++) { for(y=0;y<tiaomu[i]-add[i];y++) { if(rts[i][y].net==rts[j][x].net) { if((rts[i][y].next_route)!=(rts[j][x].next_route)) { if(rts[i][y].distance<=rts[j][x].distance) { you =false; s1 =y; } if(you) { rts[i][s1].next_route =rts[j][x].next_route; rts[i][s1].distance =rts[j][x].distance; } you=true; } } } }}/*對所有路由表進行更新*/voidNetwork::UPDATE(){ charstop; for(intt=0;t<n-1;t++)/*循環(huán)次數(shù)*/ { for(intj=0;j<n;j++)/*學(xué)習(xí)者*/ { for(inti=0;i<n;i++)/*被學(xué)習(xí)的路由器*/ { if(neighbor(i,j)) { change(i); update(j,i); change2(i); Sleep(1000); /*stop=getchar();*/ cout<<"================================================="<<endl; cout<<"根據(jù)"<<rt[i].route<<"路由表修改"<<rt[j].route<<"的路由表,"<<endl; cout<<"================================================="<<endl; for(intx=0;x<n;x++) { cout<<""<<rt[x].route<<"的路由表"<<endl; cout<<"目的網(wǎng)絡(luò)距離下一跳"<<endl; for(inty=0;y<tiaomu[x];y++) { cout<<""<<rts[x][y].net<<""<<rts[x][y].distance<<""<<rts[x][y].next_route<<endl; } cout<<endl; } cout<<endl; cout<<endl; cout<<endl; } } } }}/*判斷兩路由是否相鄰*/boolNetwork::neighbor(inti,intj){ if(i-j==1) return(true); if(j-i==1) return(true); return(false);}intwelcome(){ cout<<"********************************************************************************"<<endl; cout<<"RIP協(xié)議路由表調(diào)整算法的實現(xiàn)"<<endl; cout<<"********************************************************************************"<<endl; cout<<endl; cout<<endl;}intmain(){ welcome(); Networkgfw; gfw.bgroutes(); cout<<"==================================原始的路由表=================================="<<endl; gfw.show(); gfw.UPDATE(); cout<<""<<endl; cout<<"更新完成后的各個路由器的路由表:"<<endl; cout<<""<<endl; gfw.show(); return(0)
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年外研銜接版九年級歷史上冊階段測試試卷含答案
- 2025年華東師大版選修3物理下冊階段測試試卷含答案
- 2025年北師大新版九年級物理下冊階段測試試卷含答案
- 2025年牛津譯林版九年級歷史下冊階段測試試卷含答案
- 2025年北師大版九年級歷史下冊階段測試試卷
- 二零二五版苗木種植基地土壤檢測與分析合同4篇
- 承包給農(nóng)民工砍筏蘭竹合同(2篇)
- 二零二五年度農(nóng)藥農(nóng)膜環(huán)保處理技術(shù)合同范本4篇
- 二零二五年度泥水工施工技能競賽組織與培訓(xùn)合同2篇
- 美容院與醫(yī)療機構(gòu)合作開展抗衰老服務(wù)合同范本4篇
- 中醫(yī)診療方案腎病科
- 人教版(2025新版)七年級下冊數(shù)學(xué)第七章 相交線與平行線 單元測試卷(含答案)
- 完整2024年開工第一課課件
- 從跨文化交際的角度解析中西方酒文化(合集5篇)xiexiebang.com
- 中藥飲片培訓(xùn)課件
- 醫(yī)院護理培訓(xùn)課件:《早產(chǎn)兒姿勢管理與擺位》
- 《論文的寫作技巧》課件
- 空氣自動站儀器運營維護項目操作說明以及簡單故障處理
- 2022年12月Python-一級等級考試真題(附答案-解析)
- T-CHSA 020-2023 上頜骨缺損手術(shù)功能修復(fù)重建的專家共識
- Hypermesh lsdyna轉(zhuǎn)動副連接課件完整版
評論
0/150
提交評論