計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)----ip地址的合法性及子網(wǎng)判斷_第1頁(yè)
已閱讀1頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  課 程 設(shè) 計(jì)</b></p><p>  2011——2012學(xué)年 第2學(xué)期</p><p><b>  課程設(shè)計(jì)任務(wù)書(shū)</b></p><p>  題目四: IP地址的合法性及子網(wǎng)判斷 </p><

2、p><b>  初始條件:</b></p><p><b> ?。?)學(xué)習(xí)相關(guān)知識(shí)</b></p><p>  (2)C/C++/VC/VB/JAVA語(yǔ)言</p><p><b> ?。?)PC機(jī)一臺(tái)</b></p><p>  要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量

3、及其技術(shù)要求,以及說(shuō)明書(shū)撰寫(xiě)等具體要求)</p><p>  在掌握IP地址表示方法及子網(wǎng)劃分的基礎(chǔ)上,按如下要求完成程序。</p><p>  1)命令行格式:ip_test subnet/mask ip_addr, ip_test其中為程序名;subnet為子網(wǎng)號(hào);mask是一個(gè)數(shù)值,代表子網(wǎng)掩碼連續(xù)1的個(gè)數(shù);ip_addr是要測(cè)試的IP地址。</p><p>

4、  例如,要測(cè)試的IP地址為202.114.16.10,子網(wǎng)號(hào)為202.113.16.0,子網(wǎng)掩碼為255.255.255.0,則命令行為ip_test 202.113.16.0/24 202.114.16.10(因?yàn)?55.255.255.0是連續(xù)的24個(gè)1,所以用24表示)。</p><p>  2)判斷subnet和ip_addr的合法性。在判斷IP地址合法性時(shí)要自行編寫(xiě)代碼,不要使用任何inet函數(shù)。判斷

5、時(shí)要考慮全面,比如以下IP地址均不合法:</p><p>  123..2.1 / 123.23$.2.1 / 123.2345.2.1 / 123.23.45.2.1</p><p>  3)判斷掩碼的合法性。</p><p>  4)在IP地址合法的前提下,判斷ip_addr是否屬于子網(wǎng)subnet。</p><p>  5)輸出命令行中

6、的ip是否合法,掩碼是否合法(可適當(dāng)給出不合法的原因)以及ip_addr是否屬于子網(wǎng)subnet。</p><p><b>  時(shí)間安排:</b></p><p>  第一、二天:查閱資料,學(xué)習(xí)算法</p><p>  第三、四天:編程調(diào)試</p><p><b>  第五天:書(shū)寫(xiě)報(bào)告</b><

7、;/p><p>  指導(dǎo)教師簽名: 年 月 日</p><p>  系主任(或責(zé)任教師)簽名: 年 月 日</p><p><b>  目錄</b></p><p>  1課程設(shè)計(jì)的目的和意義4</p><p>

8、;  2課程設(shè)計(jì)的內(nèi)容和要求4</p><p>  3課程設(shè)計(jì)的相關(guān)技術(shù)5</p><p>  3.1 IP地址相關(guān)概念和知識(shí)的回顧5</p><p>  3.2特殊的IP地址形式6</p><p>  3.3 子網(wǎng)的劃分7</p><p>  4 課程設(shè)計(jì)過(guò)程7</p><p&g

9、t;  4.1 課程設(shè)計(jì)流程圖7</p><p>  4.2 課程設(shè)計(jì)源代碼9</p><p>  4.3 運(yùn)行結(jié)果15</p><p>  5 課程設(shè)計(jì)小結(jié)16</p><p><b>  6 參考文獻(xiàn)17</b></p><p>  課程設(shè)計(jì)的目的和意義</p><

10、;p>  通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì),讓我們學(xué)會(huì)處理幾種常用計(jì)算機(jī)網(wǎng)絡(luò)問(wèn)題的基本處理方法,掌握計(jì)算機(jī)網(wǎng)絡(luò)的基本原理,使我們?cè)诿鎸?duì)不斷變化的技術(shù)時(shí),具有跟蹤,學(xué)習(xí)的基礎(chǔ)與能力。</p><p>  具體而言,關(guān)于“IP地址的合法性及子網(wǎng)判斷”課程設(shè)計(jì)題目的目的是:用C/C++語(yǔ)言編寫(xiě)程序,以判斷一個(gè)IP地址是否合法,并判斷該地址是否屬于一個(gè)給定的子網(wǎng).從而能夠考察我們對(duì)IP地址的概念,各類(lèi)IP地址的區(qū)分以及子網(wǎng)劃

11、分的理解和掌握程度.</p><p>  課程設(shè)計(jì)為我們提供了一個(gè)既動(dòng)手又動(dòng)腦,獨(dú)立參加實(shí)踐的好機(jī)會(huì),要求我們將理論知識(shí)和實(shí)際情況有機(jī)地結(jié)合起來(lái),鍛煉我們的分析問(wèn)題,解決實(shí)際問(wèn)題的能力,提高我們適應(yīng)實(shí)際,實(shí)踐的能力;它也要求我們綜合運(yùn)用所學(xué)的計(jì)算機(jī)網(wǎng)絡(luò)知識(shí)來(lái)解決有一定難度的問(wèn)題,從而提高了我們對(duì)知識(shí)的綜合運(yùn)用能力,加深對(duì)知識(shí)間的融會(huì)貫通和聯(lián)系的理解。</p><p>  課程設(shè)計(jì)的內(nèi)容和要

12、求</p><p>  在掌握IP地址的表示方法以及子網(wǎng)劃分方法的基礎(chǔ)上,并以計(jì)算機(jī)網(wǎng)絡(luò)中關(guān)于IP地址的相關(guān)理論知識(shí)為基石,運(yùn)用C/C++語(yǔ)言按如下要求完成程序。</p><p>  命令行格式:ip_test subnet/mask ip_addr</p><p>  其中,ip_test為程序名;subnet為子網(wǎng)號(hào);mask是一個(gè)整型數(shù)值,代表子網(wǎng)掩碼連續(xù)1的

13、個(gè)數(shù);ip_addr表示要測(cè)試的IP地址。</p><p>  比如說(shuō),要測(cè)試的IP地址為202.113.16.10,子網(wǎng)號(hào)碼是202.113.16.0,子網(wǎng)掩碼是255.255.255.0,則命令行為ip_test202.113.16.0/24 202.113.16.10。(因?yàn)?55.255.255.0是連續(xù)的24個(gè)1,所以用24表示)</p><p>  判斷subnet和ip_ad

14、dr的合法性:</p><p>  在判斷IP地址合法性時(shí)要自行編寫(xiě)代碼,不要使用任何inet 函數(shù)。判斷時(shí)要考慮各種情況,全面分析問(wèn)題。例如以下IP地址均不合法:</p><p><b>  123..2.1</b></p><p>  123.23$.2.1</p><p>  123.2345.2.1&l

15、t;/p><p>  123.23.45.1</p><p><b>  判斷掩碼的合法性:</b></p><p>  譬如說(shuō)mask的值為負(fù)數(shù)或者大與32,這時(shí)輸入的掩碼就不合法。</p><p>  在IP地址合法,掩碼合法以及子網(wǎng)號(hào)也合法的前提下,判斷ip_addr是否屬于subnet。</p><

16、;p>  輸出命令行中的ip是否合法,掩碼是否合法,子網(wǎng)號(hào)碼是否合法(可適當(dāng)給出不合法的原因)以及ip_addr是否屬于子網(wǎng)subnet。</p><p>  還可以判斷子網(wǎng)號(hào),主機(jī)號(hào)全0,全1問(wèn)題。</p><p><b>  課程設(shè)計(jì)的相關(guān)技術(shù)</b></p><p>  3.1 IP地址相關(guān)概念和知識(shí)的回顧</p>&

17、lt;p>  大型的互連網(wǎng)絡(luò)中應(yīng)該有一個(gè)全局的地址系統(tǒng),它能夠給連接到互聯(lián)網(wǎng)的每一臺(tái)主機(jī)或者路由器分配一個(gè)唯一的全局地址。TCP/IP協(xié)議的網(wǎng)絡(luò)層使用的地址標(biāo)識(shí)符叫做IP地址,IPv4中IP地址是一個(gè)32位的二進(jìn)制地址。網(wǎng)絡(luò)中的每一臺(tái)主機(jī)或者路由器至少有一個(gè)IP地址,在Internet中不允許有兩個(gè)設(shè)備具有相同的IP地址。如果一臺(tái)主機(jī)或者路由器連接到兩個(gè)或多個(gè)物理網(wǎng)絡(luò),那么它可以擁有兩個(gè)或多個(gè)IP地址。</p>&l

18、t;p>  IP地址采用分層結(jié)構(gòu),由網(wǎng)絡(luò)號(hào)與主機(jī)號(hào)兩部分組成(如下圖所示): </p><p>  IP地址長(zhǎng)度為32位,用點(diǎn)分十進(jìn)制表示,格式為ⅹ.ⅹ.ⅹ.ⅹ,每個(gè)ⅹ為8位,每個(gè)ⅹ的值為0—255(例如202.113.29.119)。根據(jù)不同的取值范圍,IP地址可以分為五類(lèi),IP地址中的前5位用于標(biāo)識(shí)IP地址的類(lèi)別,具體的分類(lèi)規(guī)則如下:</p><p>  ·A類(lèi)地址的第

19、一位為0。</p><p>  ·B類(lèi)地址的前兩位為10 .</p><p>  ·C類(lèi)地址的前三位為110。</p><p>  ·D類(lèi)地址的前四位為1110。</p><p>  ·E類(lèi)地址的前五位為11110。</p><p>  五類(lèi)IP地址的結(jié)構(gòu)如下所示;</p&

20、gt;<p>  A類(lèi)IP地址結(jié)構(gòu)適合用于有大量主機(jī)的大型網(wǎng)絡(luò)。由于主機(jī)號(hào)長(zhǎng)度為24位,因此每個(gè)A類(lèi)網(wǎng)絡(luò)的主機(jī)IP數(shù)理論上為224=16777216。</p><p>  B類(lèi)IP地址適合用于一些國(guó)際性大公司與政府機(jī)構(gòu)等中等大小的組織。由于網(wǎng)絡(luò)IP長(zhǎng)度為14位,因此允許有214=16384個(gè)不同的B類(lèi)網(wǎng)絡(luò),實(shí)際允許連接16382個(gè)網(wǎng)絡(luò)。</p><p>  C類(lèi)IP地址適合用

21、于一些小公司與普通的研究機(jī)構(gòu)。</p><p><b>  特殊的IP地址形式</b></p><p><b>  直接廣播地址</b></p><p>  A類(lèi),B類(lèi),C類(lèi)IP地址中主機(jī)號(hào)全1的地址稱(chēng)為直接廣播地址,用來(lái)使路由器將一個(gè)分組以廣播方式發(fā)送給特定網(wǎng)絡(luò)上的所有主機(jī)。直接廣播地址只能作為分組中的目的地址。物理網(wǎng)絡(luò)

22、采用的是點(diǎn)—點(diǎn)傳輸方式,分組廣播需要通過(guò)軟件來(lái)實(shí)現(xiàn)。</p><p><b> ?。?)受限廣播地址</b></p><p>  網(wǎng)絡(luò)號(hào)與主機(jī)號(hào)的32位全位1的地址為受限廣播地址,用來(lái)將一個(gè)分組以廣播方式發(fā)送給本網(wǎng)的所有主機(jī)。本網(wǎng)的所有主機(jī)將接受該分組,路由器則阻擋該分組通過(guò)。</p><p> ?。?) “這個(gè)網(wǎng)絡(luò)上的這臺(tái)主機(jī)”地址</

23、p><p> ?。?)“這個(gè)網(wǎng)絡(luò)上的特定主機(jī)”地址</p><p>  主機(jī)或路由器向本網(wǎng)絡(luò)上的某個(gè)特定的主機(jī)發(fā)送分組,網(wǎng)絡(luò)號(hào)部分為全0,主機(jī)號(hào)為確定的值。這樣的分組被相知在本網(wǎng)絡(luò)內(nèi)部。</p><p><b> ?。?)回送地址</b></p><p>  回送地址用于網(wǎng)絡(luò)軟件測(cè)試和本地進(jìn)程見(jiàn)通信。TCP/IP協(xié)議規(guī)定網(wǎng)絡(luò)

24、號(hào)為 127的分組不能出現(xiàn)在任何網(wǎng)絡(luò)上;主機(jī)和路由器不能為該地址廣播任何尋址信息。</p><p><b>  3.3 子網(wǎng)的劃分</b></p><p>  人們?cè)谠缙谠O(shè)計(jì)與建設(shè)ARPAnet是,沒(méi)有預(yù)料到網(wǎng)絡(luò)的發(fā)展速度如此之快,應(yīng)用范圍如此之廣。當(dāng)時(shí)個(gè)人計(jì)算機(jī)與局域網(wǎng)尚未出現(xiàn)。所以,研究者在設(shè)計(jì)Internet地址的編址方案時(shí),主要是針對(duì)大型互聯(lián)的網(wǎng)絡(luò)結(jié)構(gòu)。設(shè)計(jì)I

25、P地址的最初目的是希望每個(gè)IP得志都能唯一地、確定地識(shí)別一個(gè)網(wǎng)絡(luò)與一臺(tái)主機(jī),但是這種方法同時(shí)也存在著兩個(gè)主要的問(wèn)題,即IP地址的有效利用率和路由器的工作效率。</p><p>  為了解決這個(gè)問(wèn)題,人們提出了子網(wǎng)(subnet)和超網(wǎng)(supernet)的概念。子網(wǎng)就是一個(gè)大的網(wǎng)絡(luò)劃分成幾個(gè)較小的網(wǎng)絡(luò),而每一個(gè)小網(wǎng)絡(luò)都是其自己的地址。超網(wǎng)就是將一個(gè)組織所屬的幾個(gè)C類(lèi)網(wǎng)絡(luò)合并成為一個(gè)更大地址范圍的邏輯網(wǎng)絡(luò)。<

26、/p><p>  劃分子網(wǎng)實(shí)際上就是在IP地址系統(tǒng)中增加一個(gè)層次。三級(jí)IP地址的表示方法為netID-subnet ID-host ID。第一級(jí)網(wǎng)絡(luò)號(hào)定義了網(wǎng)點(diǎn)的位置;第二級(jí)子網(wǎng)號(hào)定義了物理子網(wǎng);第三級(jí)主機(jī)號(hào)定義了主機(jī)和路由器到物理網(wǎng)絡(luò)的連接。三級(jí)層次的IP地址,一個(gè)IP分組的路由器的過(guò)程分為三步:第一步將分組轉(zhuǎn)發(fā)給網(wǎng)點(diǎn),第二步轉(zhuǎn)發(fā)給物理子網(wǎng),第三步轉(zhuǎn)發(fā)給確切的主機(jī)。</p><p>  當(dāng)三

27、級(jí)層次的IP地址提出后,一個(gè)很顯示的問(wèn)題是:如何從一個(gè)IP地址提取出子網(wǎng)號(hào)。因此,提出了子網(wǎng)掩碼(subnet mask)的概念。子網(wǎng)掩碼有時(shí)也叫做子網(wǎng)掩碼。</p><p>  子網(wǎng)掩碼表示方法:網(wǎng)絡(luò)號(hào)與子網(wǎng)號(hào)置1,主機(jī)號(hào)置0。</p><p>  如判斷某一IP地址是否屬于某一子網(wǎng)呢?只需將二進(jìn)制IP地址與子網(wǎng)掩碼按位進(jìn)行“與”運(yùn)算。若“與”運(yùn)算所得值與給定子網(wǎng)地址一致,則說(shuō)明該IP地

28、址屬于給定的子網(wǎng)。</p><p><b>  4 課程設(shè)計(jì)過(guò)程</b></p><p>  4.1課程設(shè)計(jì)流程圖</p><p>  4.2 課程設(shè)計(jì)源代碼</p><p>  #include <iostream.h></p><p>  #include <string.h

29、></p><p>  #include <stdlib.h></p><p>  #include <stdio.h></p><p>  #include <math.h></p><p>  #include <ctype.h></p><p>  #incl

30、ude <winsock2.h></p><p>  #include <ws2tcpip.h></p><p>  #include <time.h></p><p>  #include <windows.h></p><p>  #pragma comment(lib,"ws2_

31、32.lib")</p><p>  class ipTest{ //類(lèi)結(jié)構(gòu)</p><p><b>  public:</b></p><p>  char ip[15];</p><p>  char subnetPlusMask[18];</p><p>  char subnet

32、[18];</p><p>  char TempIp[15];</p><p>  l maskIsValid;</p><p><b>  int mask;</b></p><p>  char Tempsub[18];</p><p>  ipTest(char *,char *);<

33、;/p><p>  ~ipTest(){};</p><p>  bool NoIllegalChar(char *); //非法字符的判斷</p><p>  bool ipIsValid(char *); //判斷IP地址是否合法</p><p>  bool subne

34、tIsValid(char *); //判斷子網(wǎng)號(hào)是否合法</p><p>  void belong(); //判斷IP是否為子網(wǎng)成員</p><p><b>  print();</b></p><p><b>  }; </b>

35、</p><p>  void main(int argc,char * argv[]){ //主函數(shù)</p><p>  if(argc!=3){ //判斷參數(shù)格式化是否正確</p><p>  cout<<"error"<<endl<<&qu

36、ot;format shoud be:ip_test subnet/mask ip"<<endl;</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>

37、  if(strlen(argv[1])>18){ //先判斷最簡(jiǎn)單的錯(cuò)誤,長(zhǎng)度是否超出</p><p>  cout<<"subnet/mask is too long";</p><p><b>  return;</b></p><p><b>  }<

38、/b></p><p>  if(strlen(argv[2])>15){</p><p>  cout<<"ip is too long";</p><p><b>  return;</b></p><p><b>  }</b></p>

39、<p>  ipTest test(argv[1],argv[2]); //實(shí)例話(huà)ipTest類(lèi)</p><p>  test.print(); //完成相應(yīng)判別并輸出結(jié)果</p><p><b>  }</b></p><p><b>  }<

40、/b></p><p>  ipTest::ipTest( char* subnetPlusMask, char *ip){ //構(gòu)造函數(shù)</p><p>  maskIsValid=true;</p><p>  char temp[2];</p><p>  int smLen=strlen(subnetPlusMask);

41、 //把'/'前的字符復(fù)制到subnet字符數(shù)組中</p><p>  for( int i=0; i<smLen && subnetPlusMask[i] !='/'; i++ ){</p><p>  this->subnet[i]=subnetPlusMask[i];</p><p>  th

42、is->Tempsub[i]=subnetPlusMask[i];</p><p><b>  }</b></p><p>  subnet[i]='\0';</p><p>  Tempsub[i]='\0';</p><p>  if(i<=smLen-2){

43、 //初始化mask和maskIsVslid</p><p>  if(i==smLen-2){</p><p>  temp[0]=subnetPlusMask[i+1];</p><p>  if( !isdigit(temp[0]) )</p><p>  maskIsValid = false;&

44、lt;/p><p><b>  }</b></p><p>  else if( i == smLen-3 ){</p><p>  temp[0]=subnetPlusMask[i+1];</p><p>  temp[1]=subnetPlusMask[i+2];</p><p>  if( !(

45、isdigit(temp[0])&&isdigit(temp[1])) )</p><p>  maskIsValid=false;</p><p><b>  }</b></p><p>  mask = atoi(temp);</p><p>  if( mask<0 || mask >

46、32)</p><p>  maskIsValid = false;</p><p><b>  }</b></p><p><b>  else</b></p><p>  maskIsValid=false;</p><p>  strcpy( this->subn

47、etPlusMask, subnetPlusMask);</p><p>  strcpy( this->ip, ip );</p><p>  strcpy( this->TempIp, ip );</p><p><b>  }</b></p><p>  ipTest::print(){ //調(diào)

48、用判別函數(shù),并輸出結(jié)果</p><p>  bool subIsV=subnetIsValid(Tempsub);</p><p>  bool ipIsV=ipIsValid(TempIp);</p><p>  if(!subIsV)</p><p>  cout<<"subnet is invalid ! &quo

49、t;<<endl;</p><p><b>  else</b></p><p>  cout<<"valid subnet: "<<subnet<<endl;</p><p>  if(!maskIsValid)</p><p>  cout<

50、<"mask is invalid!"<<endl;</p><p><b>  else</b></p><p>  cout<<"valid mask:"<<mask<<endl;</p><p>  if(!ipIsV)</p>&

51、lt;p>  cout<<"ip is invalid!"<<endl;</p><p><b>  else</b></p><p>  cout<<"valid ip:"<<ip<<endl;</p><p>  //判斷IP是否bel

52、ong subnet</p><p>  if(subIsV&&ipIsV&&maskIsValid)</p><p><b>  belong();</b></p><p><b>  }</b></p><p>  bool ipTest::NoIllegalCh

53、ar(char *ch){ //子函數(shù),判斷輸入是否含有非數(shù)字字符</p><p>  unsigned int i,k=0;</p><p>  for(i=0;i<strlen(ch);i++){</p><p>  if(isdigit(*(ch+i))==0){</p><p>  return false;</p&g

54、t;<p><b>  }</b></p><p><b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  bool ipTest::ipIsValid(char * ip){ /

55、/判別IP地址是否合法</p><p>  char ch[]=" ."; </p><p>  char *token,*dot[4];</p><p>  int iplen=0;</p><p>  token=strtok(ip,ch); //以&q

56、uot;."標(biāo)志將IP字符串按節(jié)分開(kāi)</p><p>  while(token!=NULL){ //循環(huán)進(jìn)行,知道結(jié)束</p><p>  dot[iplen]=token; //將分開(kāi)的每段賦值給dot</p><p><b&

57、gt;  iplen++;</b></p><p>  token= strtok(NULL,ch);</p><p>  }if(iplen!=4)</p><p>  {cout<<this->Tempsub<<endl;</p><p>  return false;}

58、 //段數(shù)不對(duì)</p><p>  for(int i=0;i<4;i++){</p><p>  if(!NoIllegalChar(dot[i])||atoi(dot[i])>255) //有非法字符或某段值非法</p><p>  return false;</p><p>&

59、lt;b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  bool ipTest::subnetIsValid(char* subnet){ //判斷子網(wǎng)號(hào)是否合法</p><p>  if( ! ipI

60、sValid(subnet)) //調(diào)用判別IP地址合法性的函數(shù)</p><p>  return false;</p><p>  return true;</p><p><b>  }</b></p><p>  //判斷IP是否為子網(wǎng)成員,判斷子網(wǎng)號(hào)與掩碼是否匹配,

61、以及子網(wǎng)號(hào)、主機(jī)號(hào)全0全1問(wèn)題</p><p>  void ipTest::belong(){</p><p>  int subLen=strlen(subnet);</p><p>  int ipLen=strlen(ip);</p><p>  unsigned int iIPA,iSubA,iMask;</p>&l

62、t;p>  unsigned char subA[4],ipA[4];</p><p>  char temp[3];</p><p>  int i,j,t=0;</p><p>  for(i=0,j=0;i<subLen;i++){ //不用再檢錯(cuò)</p><p>  if(subne

63、t[i] != '.')</p><p>  temp[j++]=subnet[i]; //temp數(shù)組中放'.'間的串</p><p><b>  else{</b></p><p>  subA[3-t] = atoi(temp); /

64、/subA數(shù)組中放'.'間的數(shù)據(jù)</p><p><b>  j=0;</b></p><p><b>  t++;</b></p><p>  temp[0]=temp[1]=temp[2]='\0';</p><p><b>  }</b>&

65、lt;/p><p><b>  }</b></p><p>  subA[0] = atoi(temp);</p><p>  temp[0]=temp[1]=temp[2]='\0';</p><p>  iSubA = *( unsigned int *)subA; //iSubA中放sub

66、net中'.'除外的串對(duì)應(yīng)的數(shù)</p><p>  for(i= 0, j= 0, t= 0; i<ipLen; i++){ //不用再檢錯(cuò)</p><p>  if(ip[i] != '.')</p><p>  temp[j++] = ip[i];</p><p><b>  else{

67、</b></p><p>  ipA[3-t] = atoi(temp);</p><p><b>  j=0;</b></p><p><b>  t++;</b></p><p>  temp[0]=temp[1]=temp[2]='\0';</p>&

68、lt;p><b>  }</b></p><p><b>  }</b></p><p>  ipA[0] = atoi(temp);</p><p>  iIPA = *( unsigned int* )ipA; //iIPA中放IP中'.'除外的串對(duì)應(yīng)的數(shù)</p>

69、<p>  iMask = 0xffffffff;</p><p>  iMask<<=(32-mask); //獲取掩碼</p><p>  if( ( iSubA | iMask ) != iMask ){ //說(shuō)明sub與mask不匹配</p><p>  cout<<&quo

70、t; 子網(wǎng)號(hào)與掩碼不匹配,error!"<<endl;</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if( ( iSubA ^ iMask ) == 0 ){ //說(shuō)明子網(wǎng)號(hào)全1</p><p>  c

71、out<<" 子網(wǎng)號(hào)全1,error!"<<endl;</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if( ( iSubA & iMask ) == 0 ){ //說(shuō)明子網(wǎng)號(hào)全0<

72、/p><p>  cout<<" 子網(wǎng)號(hào)全0,error!"<<endl;</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if( ( iSubA) == (iIPA & iMask) )

73、{ //IP和掩碼與,結(jié)果和子網(wǎng)號(hào)比較</p><p>  if( ( iIPA | iMask) == iMask ){ //說(shuō)明主機(jī)號(hào)全0</p><p>  cout<<" 主機(jī)號(hào)全0,error!"<<endl;</p><p><b>  return;</b></p&

74、gt;<p><b>  }</b></p><p>  if( ( iIPA | iMask ) == 0xffffffff ){ //說(shuō)明主機(jī)號(hào)全1</p><p>  cout<<" 主機(jī)號(hào)全1,error!"<<endl;</p><p><b>  

75、return;</b></p><p><b>  }</b></p><p>  cout<<" "<< ip <<" belongs to "<<subnetPlusMask<<endl;</p><p><b>  r

76、eturn;</b></p><p>  }//ip屬于subnet</p><p><b>  else</b></p><p>  cout<<" "<< ip <<" doesn't belong to "<<subnetPlusM

77、ask<<endl;</p><p>  }//ip不屬于subnet</p><p><b>  4.3 運(yùn)行結(jié)果</b></p><p>  子網(wǎng)號(hào)、子網(wǎng)掩碼和IP地址均不合法時(shí):</p><p>  子網(wǎng)號(hào)、子網(wǎng)掩碼和IP地址均合法,且IP地址屬于子網(wǎng)號(hào)時(shí):</p><p> 

78、 子網(wǎng)號(hào)、子網(wǎng)掩碼和IP地址均合法,且IP地址不屬于子網(wǎng)號(hào)時(shí):</p><p><b>  子網(wǎng)號(hào)不合法時(shí):</b></p><p><b>  掩碼不合法時(shí):</b></p><p><b>  IP地址不合法時(shí):</b></p><p><b>  5 課程設(shè)計(jì)小

79、結(jié)</b></p><p>  為期一周的計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)終于圓滿(mǎn)結(jié)束,我所做的課設(shè)題目“IP地址的合法性及子網(wǎng)判斷”算是比較簡(jiǎn)單,但是由于對(duì)子網(wǎng)掩碼等各種概念的不夠熟悉,在開(kāi)始之前我通過(guò)課本和網(wǎng)絡(luò)查找了大量信息,在考慮IP地址(subnet子網(wǎng)地址原理相同)非法的情況時(shí),我們就漏掉了幾種情況,這直接導(dǎo)致我們畫(huà)的流程圖以及編寫(xiě)的源代碼不完善。經(jīng)過(guò)反復(fù)的修改最后才使代碼功能完善。在設(shè)計(jì)好算法后,用C/

80、C++編寫(xiě)源代碼以實(shí)現(xiàn)算法的過(guò)程中,面對(duì)如何選擇合適的數(shù)據(jù)結(jié)構(gòu),我們感到很為難。最后在老師的指導(dǎo)和幫助下才解決。另一方面,在代碼的調(diào)試過(guò)程中,程序出現(xiàn)了很多的Debug,有的是符號(hào)的缺省比較簡(jiǎn)單,但有的比較復(fù)雜,自己看不懂,我也請(qǐng)教了很多同學(xué)幫忙結(jié)局,最后終于搞定了所有問(wèn)題,看著最關(guān)鍵的一部分解決了,真讓人欣喜。</p><p>  此次課設(shè)也讓我體會(huì)到了,很多東西說(shuō)的簡(jiǎn)單,做的難,看書(shū)的同時(shí)只有結(jié)合動(dòng)手才能最有

81、效率地提高自己的編程能力。</p><p><b>  6 參考文獻(xiàn)</b></p><p>  [1]謝希仁 《計(jì)算機(jī)網(wǎng)絡(luò)》(第五版)電子工業(yè)出版社 2008.1</p><p>  [2]張堯?qū)W,郭國(guó)強(qiáng),王曉春,趙艷標(biāo) 《計(jì)算機(jī)網(wǎng)絡(luò)與Internet教程》(第2版)清華大學(xué)出版社 2006.11</p><p>  

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論