2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p><b>  一、設(shè)計(jì)目的2</b></p><p><b>  二、功能介紹2</b></p><p><b>  三、程序流程2</b></p><p><b>  四、詳細(xì)設(shè)

2、計(jì)4</b></p><p><b>  五、設(shè)計(jì)總結(jié)14</b></p><p><b>  六、參考文獻(xiàn)14</b></p><p><b>  一、設(shè)計(jì)目的</b></p><p>  經(jīng)過此次課程設(shè)計(jì),令學(xué)生理解和學(xué)會應(yīng)用winsock來進(jìn)行編程;使學(xué)

3、生提高理論聯(lián)系實(shí)際解決實(shí)際問題的能力;也使學(xué)生對基于c++的網(wǎng)絡(luò)通信編程進(jìn)行系統(tǒng)設(shè)計(jì)過程中的諸多具體問題有感性的認(rèn)識和深入的理解;進(jìn)而提高學(xué)生的學(xué)習(xí)興趣為其將來順利進(jìn)入畢業(yè)環(huán)節(jié)作鋪墊。</p><p><b>  二、功能介紹</b></p><p> ?。?)配置文件支持功能:使用配置文件存儲程序配置信息。</p><p> ?。?)網(wǎng)絡(luò)參數(shù)

4、管理功能:能夠管理網(wǎng)絡(luò)參數(shù),例如IP、機(jī)器名、掩碼和DNS等。(3)路由表管理功能:能夠查看和管理主機(jī)路由表?xiàng)l目。</p><p><b>  三、程序流程</b></p><p><b>  是</b></p><p><b>  是</b></p><p><b&

5、gt;  圖1.程序流程圖</b></p><p><b>  四、詳細(xì)設(shè)計(jì)</b></p><p> ?。ㄒ唬┇@取本地網(wǎng)絡(luò)配置信息</p><p>  圖2.獲取本地網(wǎng)絡(luò)配置信息</p><p>  本功能實(shí)現(xiàn)的是查詢本地網(wǎng)絡(luò)的基本配置信息,包括了主機(jī)名,注冊域名,DNS服務(wù)器,獲取信息后打印出來,如圖2,

6、具體的代碼如下:</p><p>  int main()</p><p><b>  {</b></p><p>  FIXED_INFO fi;</p><p>  ULONG ulOutBufLen = sizeof(fi)+100;</p><p>  // 獲取本地電腦的網(wǎng)絡(luò)參數(shù)<

7、/p><p>  /*if(GetNetworkParams(&fi, &ulOutBufLen) != ERROR_SUCCESS)</p><p><b>  {</b></p><p>  printf(" GetNetworkParams() failed \n");</p><p&

8、gt;<b>  getch();</b></p><p>  return -1;</p><p><b>  }*/</b></p><p>  GetNetworkParams(&fi, &ulOutBufLen);</p><p><b>  // 主機(jī)名稱<

9、/b></p><p>  printf(" Host Name: %s \n", fi.HostName);</p><p>  // 電腦注冊的域名</p><p>  printf(" Domain Name: %s \n", fi.DomainName);</p><p>  // 打印出

10、所有的DNS服務(wù)器</p><p>  printf(" DNS Servers: \n");</p><p>  printf(" \t%s \n", fi.DnsServerList.IpAddress.String);</p><p>  IP_ADDR_STRING *pIPAddr = fi.DnsServerLis

11、t.Next;</p><p>  while(pIPAddr != NULL)</p><p><b>  {</b></p><p>  printf(" \t%s \n", pIPAddr->IpAddress.String);</p><p>  pIPAddr = pIPAddr-&g

12、t;Next;</p><p><b>  }</b></p><p><b>  getch();</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b

13、> ?。ǘ┳x取網(wǎng)卡信息</b></p><p><b>  圖3.網(wǎng)卡信息</b></p><p><b>  圖4.網(wǎng)卡信息</b></p><p>  本功能實(shí)現(xiàn)的獲取本地網(wǎng)卡信息,打印出本地連接,無線連接,WiFi適配器等,具體的內(nèi)容如圖所示,主要代碼如下:</p><p>

14、;  typedef struct tagAdapterInfo</p><p><b>  {</b></p><p>  string strName; // 適配器名稱</p><p>  string strDriverDesc; // 適配器描述</p><p>  string

15、 strIP; // IP地址</p><p>  string strNetMask; // 子網(wǎng)掩碼</p><p>  string strNetGate; // 網(wǎng)關(guān)</p><p>  string strBroadcastIp; // 廣播地址</p><p>  

16、string strS; // 測試用的</p><p>  }ADAPTER_INFO;</p><p>  BOOL GetAdapterInfo();//獲取網(wǎng)絡(luò)適配器信息</p><p>  BOOL RegGetIP(ADAPTER_INFO *pAI, LPCTSTR lpszAdapterName, int nIndex =

17、 0);</p><p>  vector<ADAPTER_INFO*> AdapterInfoVector;</p><p>  int main()</p><p><b>  {</b></p><p>  GetAdapterInfo();</p><p><b> 

18、 int i;</b></p><p>  for (i = 0;i < AdapterInfoVector.size();i++)</p><p><b>  {</b></p><p>  cout << AdapterInfoVector[i]->strName << ":&quo

19、t; << endl << endl;</p><p>  cout << " " << AdapterInfoVector[i]->strDriverDesc << endl;</p><p>  cout << " " << Ad

20、apterInfoVector[i]->strIP << endl;</p><p>  cout << " " << AdapterInfoVector[i]->strNetMask << endl;</p><p>  cout << " " &l

21、t;< AdapterInfoVector[i]->strNetGate << endl;</p><p>  cout << " " << AdapterInfoVector[i]->strBroadcastIp << endl;</p><p>  cout << endl;

22、</p><p><b>  }</b></p><p><b>  getch();</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  // 取得所有

23、網(wǎng)卡信息</p><p>  BOOL GetAdapterInfo()</p><p><b>  {</b></p><p>  // 這里的代碼適合WINDOWS2000,對于NT需要讀取HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards

24、</p><p>  HKEY hKey, hSubKey, hNdiIntKey;</p><p>  if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,</p><p>  "System\\CurrentControlSet\\Control\\Class\\{4d36e972-e325-11ce-bfc1-08002be1031

25、8}",</p><p><b>  0,</b></p><p><b>  KEY_READ,</b></p><p>  &hKey) != ERROR_SUCCESS)</p><p>  return FALSE;</p><p>  DWORD

26、dwIndex = 0;</p><p>  DWORD dwBufSize = 256;</p><p>  DWORD dwDataType;</p><p>  char szSubKey[256];</p><p>  unsigned char szData[256];</p><p>  while(Reg

27、EnumKeyEx(hKey, dwIndex++, szSubKey, &dwBufSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)</p><p><b>  {</b></p><p>  if(RegOpenKeyEx(hKey, szSubKey, 0, KEY_READ, &hSubKey) =

28、= ERROR_SUCCESS)</p><p><b>  { </b></p><p>  if(RegOpenKeyEx(hSubKey, "Ndi\\Interfaces", 0, KEY_READ, &hNdiIntKey) == ERROR_SUCCESS)</p><p><b>

29、;  {</b></p><p>  dwBufSize = 256;</p><p>  if(RegQueryValueEx(hNdiIntKey, "LowerRange", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)</p><p><b&g

30、t;  {</b></p><p>  if(strstr((char*)szData, "ethernet") != NULL)// 判斷是不是以太網(wǎng)卡</p><p><b>  {</b></p><p>  dwBufSize = 256;</p><p>  if(RegQ

31、ueryValueEx(hSubKey, "DriverDesc", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)</p><p><b>  {</b></p><p>  ADAPTER_INFO *pAI = new ADAPTER_INFO;</p>

32、<p>  pAI->strDriverDesc = (LPCTSTR)szData;</p><p>  dwBufSize = 256;</p><p>  if(RegQueryValueEx(hSubKey, "NetCfgInstanceID", 0, &dwDataType, szData, &dwBufSize) == E

33、RROR_SUCCESS)</p><p><b>  {</b></p><p>  pAI->strS = (LPCTSTR)szData;</p><p>  RegGetIP(pAI, (LPCTSTR)szData);</p><p><b>  }</b></p>&

34、lt;p>  AdapterInfoVector.push_back(pAI); // 加入到容器中</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  RegCloseKey(

35、hNdiIntKey);</p><p><b>  }</b></p><p>  RegCloseKey(hSubKey);</p><p><b>  }</b></p><p>  dwBufSize = 256;</p><p>  } /* end of w

36、hile */</p><p>  RegCloseKey(hKey);</p><p>  return true;</p><p><b>  }</b></p><p>  // 得到注冊表中的IP信息</p><p>  BOOL RegGetIP(ADAPTER_INFO *pAI

37、, LPCTSTR lpszAdapterName, int nIndex/* =0 */)</p><p><b>  {</b></p><p>  HKEY hKey, hSubKey, hNdiIntKey;</p><p>  string strKeyName = "SYSTEM\\CurrentControlSet\\S

38、ervices\\Tcpip\\Parameters\\Interfaces\\";</p><p>  strKeyName += lpszAdapterName;</p><p>  if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,</p><p>  strKeyName.c_str(),0,KEY_READ,</p>

39、;<p>  &hKey) != ERROR_SUCCESS)</p><p>  return FALSE;</p><p>  unsigned char szData[256];</p><p>  DWORD dwDataType, dwBufSize;</p><p>  dwBufSize = 256;<

40、;/p><p>  if(RegQueryValueEx(hKey, "DhcpIPAddress", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)</p><p>  pAI->strIP = (LPCTSTR)szData;</p><p><b>  

41、else{</b></p><p>  if(RegQueryValueEx(hKey, "IPAddress", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)</p><p>  pAI->strIP = (LPCTSTR)szData;</p><p&

42、gt;<b>  }</b></p><p>  dwBufSize = 256;</p><p>  if(RegQueryValueEx(hKey, "DhcpSubnetMask", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)</p><p&g

43、t;  pAI->strNetMask = (LPCTSTR)szData;</p><p><b>  else</b></p><p><b>  {</b></p><p>  if(RegQueryValueEx(hKey, "SubnetMask", 0, &dwDataType

44、, szData, &dwBufSize) == ERROR_SUCCESS)</p><p>  pAI->strNetMask = (LPCTSTR)szData;</p><p><b>  }</b></p><p>  dwBufSize = 256;</p><p>  if(RegQueryV

45、alueEx(hKey, "DhcpDefaultGateway", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)</p><p>  pAI->strNetGate = (LPCTSTR)szData;</p><p><b>  else</b></p&g

46、t;<p><b>  {</b></p><p>  if(RegQueryValueEx(hKey, "DefaultGateway", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)</p><p>  pAI->strNetGate = (LPC

47、TSTR)szData;</p><p><b>  }</b></p><p>  RegCloseKey(hKey);</p><p>  strKeyName = "SYSTEM\\ControlSet001\\Control\\Network";</p><p>  if(RegOpenKey

48、Ex(HKEY_LOCAL_MACHINE,strKeyName.c_str(),0,</p><p>  KEY_READ,&hKey) != ERROR_SUCCESS)</p><p>  return FALSE;</p><p>  char szSubKey[256];</p><p>  char szSubKey_tw

49、o[256];</p><p>  memset(szSubKey, 0, 256);</p><p>  DWORD dwIndex = 0;</p><p>  DWORD dwIndex_two = 0;</p><p>  dwBufSize = 256;</p><p>  DWORD dwBufSize_t

50、wo = 256;</p><p>  pAI->strName = pAI->strDriverDesc;</p><p>  while(RegEnumKey(hKey, dwIndex++, szSubKey, dwBufSize) == ERROR_SUCCESS)</p><p><b>  {</b></p>

51、<p>  string strKeyName_two;</p><p>  strKeyName_two = strKeyName + "\\";</p><p>  strKeyName_two += szSubKey;</p><p>  if(RegOpenKeyEx(hKey, szSubKey, 0, KEY_READ

52、, &hSubKey) == ERROR_SUCCESS)</p><p><b>  {</b></p><p>  while(RegEnumKey(hSubKey, dwIndex_two++, szSubKey_two, dwBufSize_two) == ERROR_SUCCESS)</p><p><b>  {&

53、lt;/b></p><p>  if (strstr(szSubKey_two, lpszAdapterName) != NULL)</p><p><b>  {</b></p><p>  strcat(szSubKey_two, "\\Connection");</p><p>  if

54、(RegOpenKeyEx(hSubKey, szSubKey_two, 0, KEY_READ, &hNdiIntKey) == ERROR_SUCCESS)</p><p><b>  {</b></p><p>  if(RegQueryValueEx(hNdiIntKey, "Name", 0, &dwDataType, s

55、zData, &dwBufSize) == ERROR_SUCCESS)</p><p><b>  {</b></p><p>  pAI->strName = (LPCTSTR)szData;</p><p><b>  break;</b></p><p><b>  

56、}</b></p><p>  RegCloseKey(hNdiIntKey);</p><p>  } </p><p><b>  }</b></p><p><b>  }</b></p><p>  RegClose

57、Key(hSubKey);</p><p><b>  }</b></p><p><b>  }</b></p><p>  RegCloseKey(hKey); </p><p>  return TRUE;</p><p><b>  }</b>&

58、lt;/p><p> ?。ㄈ┨砑雍蛣h除IP</p><p>  圖5.添加和刪除新的IP</p><p>  本功能實(shí)現(xiàn)的是在本地IP地址列表中添加新的IP地址,然后刪除新添加的IP地址,</p><p>  實(shí)現(xiàn)對IP列表的管理。添加成功會出現(xiàn)“IPv4 address was successfully added.”</p&g

59、t;<p>  的語句,刪除成功會出現(xiàn)“IPv4 address was successfully deleted.”的語句。具</p><p><b>  體的代碼實(shí)現(xiàn)如下:</b></p><p>  int main( )</p><p><b>  {</b></p><

60、p>  /* Variables used by GetIpAddrTable */</p><p>  PMIB_IPADDRTABLE pIPAddrTable;</p><p>  DWORD dwSize = 0;</p><p>  DWORD dwRetVal = 0;</p><p>  IN_ADDR IPAddr;&l

61、t;/p><p>  DWORD ifIndex;</p><p>  UINT iaIPAddress;</p><p>  UINT imIPMask;</p><p>  /* IPv4 address and subnet mask we will be adding */ </p><p>  iaIPAddre

62、ss = inet_addr("192.168.0.17");</p><p>  imIPMask = inet_addr("255.255.255.0");</p><p>  /* Variables where handles to the added IP are returned */</p><p>  ULON

63、G NTEContext = 0;</p><p>  ULONG NTEInstance = 0;</p><p>  /* Variables used to return error message */</p><p>  LPVOID lpMsgBuf;</p><p>  // Before calling AddIPAddres

64、s we use GetIpAddrTable to get</p><p>  // an adapter to which we can add the IP.</p><p>  pIPAddrTable = (MIB_IPADDRTABLE *) MALLOC(sizeof (MIB_IPADDRTABLE));</p><p>  if (pIPAddrT

65、able == NULL) </p><p><b>  {</b></p><p>  printf("Error allocating memory needed to call GetIpAddrTable\n");</p><p><b>  return 0;</b></p>&

66、lt;p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b></p><p>  dwSize = 0;</p><p>  // Make an initial call to GetIpAddrTable t

67、o get the</p><p>  // necessary size into the dwSize variable</p><p>  if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) ==</p><p>  ERROR_INSUFFICIENT_BUFFER)</p><p>&l

68、t;b>  {</b></p><p>  FREE(pIPAddrTable);</p><p>  pIPAddrTable = (MIB_IPADDRTABLE *) MALLOC(dwSize);</p><p><b>  }</b></p><p>  if (pIPAddrTable ==

69、 NULL) </p><p><b>  {</b></p><p>  printf("Memory allocation failed for GetIpAddrTable\n");</p><p><b>  return 0;</b></p><p><b>

70、  }</b></p><p><b>  }</b></p><p>  // Make a second call to GetIpAddrTable to get the</p><p>  // actual data we want</p><p>  if ((dwRetVal = GetIpAd

71、drTable(pIPAddrTable, &dwSize, 0)) == NO_ERROR) </p><p><b>  {</b></p><p>  // Save the interface index to use for adding an IP address</p><p>  ifIndex = pIPAddrTab

72、le->table[0].dwIndex;</p><p>  printf("\n\tInterface Index:\t%ld\n", ifIndex);</p><p>  IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[0].dwAddr;</p><p>  printf(

73、"\tIP Address: \t%s (%lu%)\n", inet_ntoa(IPAddr),</p><p>  pIPAddrTable->table[0].dwAddr);</p><p>  IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[0].dwMask;</p>

74、<p>  printf("\tSubnet Mask: \t%s (%lu%)\n", inet_ntoa(IPAddr),</p><p>  pIPAddrTable->table[0].dwMask);</p><p>  IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[0].d

75、wBCastAddr;</p><p>  printf("\tBroadCast Address:\t%s (%lu%)\n", inet_ntoa(IPAddr),</p><p>  pIPAddrTable->table[0].dwBCastAddr);</p><p>  printf("\tReassembly siz

76、e: \t%lu\n\n",</p><p>  pIPAddrTable->table[0].dwReasmSize);</p><p><b>  } </b></p><p><b>  else </b></p><p><b>  {</b></

77、p><p>  printf("Call to GetIpAddrTable failed with error %d.\n", dwRetVal);</p><p>  if (pIPAddrTable)</p><p>  FREE(pIPAddrTable);</p><p><b>  return 0;&l

78、t;/b></p><p><b>  }</b></p><p>  if (pIPAddrTable) </p><p><b>  {</b></p><p>  FREE(pIPAddrTable);</p><p>  pIPAddrTable = NULL;

79、</p><p><b>  }</b></p><p>  if ((dwRetVal = AddIPAddress(iaIPAddress,</p><p>  imIPMask ,</p><p><b>  ifIndex,</b></p><p>  &NT

80、EContext, &NTEInstance)) == NO_ERROR) </p><p><b>  {</b></p><p>  printf("\tIPv4 address was successfully added.\n");</p><p><b>  } </b></p&

81、gt;<p><b>  else </b></p><p><b>  {</b></p><p>  printf("AddIPAddress failed with error: %d\n", dwRetVal);</p><p>  if (FormatMessage(FORMAT

82、_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language</p><p>  (LPTSTR) & lpMsgBuf, 0

83、, NULL)) </p><p><b>  {</b></p><p>  printf("\tError: %s", lpMsgBuf);</p><p>  LocalFree(lpMsgBuf);</p><p><b>  return 0;</b></p>

84、;<p><b>  }</b></p><p><b>  }</b></p><p>  //刪除剛利用NTEContext所添加的IP地址</p><p>  // variable where the handle was returned </p><p>  i

85、f ((dwRetVal = DeleteIPAddress(NTEContext)) == NO_ERROR)</p><p><b>  {</b></p><p>  printf("\tIPv4 address was successfully deleted.\n");</p><p><b>  } &

86、lt;/b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("\tDeleteIPAddress failed with error: %d\n", dwRetVal);</p><p><b&

87、gt;  return 0;</b></p><p><b>  }</b></p><p><b>  getch();</b></p><p><b>  return 0;</b></p><p><b>  }</b></p>

88、;<p><b>  (四)修改默認(rèn)網(wǎng)關(guān)</b></p><p><b>  圖6.修改默認(rèn)網(wǎng)關(guān)</b></p><p>  本功能實(shí)現(xiàn)的是修改默認(rèn)網(wǎng)關(guān)的功能,修改失敗會提示失敗,修改成功會提示如圖5,并打印出新的默認(rèn)網(wǎng)關(guān)的地址。具體代碼如下:</p><p>  int main()</p>

89、<p><b>  {</b></p><p><b>  // 新網(wǎng)關(guān)地址</b></p><p>  DWORD dwNewGateway = ::inet_addr("192.168.0.1");</p><p>  // 在表中查找我們想要的入口。默認(rèn)網(wǎng)關(guān)的目的地址為0.0.0.0&l

90、t;/p><p>  PMIB_IPFORWARDTABLE pIpRouteTable = MyGetIpForwardTable(TRUE);</p><p>  PMIB_IPFORWARDROW pRow = NULL;</p><p>  if(pIpRouteTable != NULL)</p><p><b>  {<

91、;/b></p><p>  for(DWORD i=0; i<pIpRouteTable->dwNumEntries; i++)</p><p><b>  {</b></p><p>  if(pIpRouteTable->table[i].dwForwardDest == 0)// 找到了默認(rèn)網(wǎng)關(guān)</p&g

92、t;<p><b>  {</b></p><p>  // 申請內(nèi)存來保存這個(gè)入口。</p><p>  // 這比自己填充MIB_IPFORWARDROW結(jié)構(gòu)簡單許多,我們僅需要改變網(wǎng)關(guān)地址</p><p>  if(pRow == NULL)</p><p><b>  {</b>

93、;</p><p>  pRow = (PMIB_IPFORWARDROW)::GlobalAlloc(GPTR, sizeof(MIB_IPFORWARDROW));</p><p>  memcpy(pRow, &pIpRouteTable->table[i], sizeof(MIB_IPFORWARDROW));</p><p><b>

94、;  }</b></p><p>  // 刪除舊的默認(rèn)網(wǎng)關(guān)入口</p><p>  if(::DeleteIpForwardEntry(&pIpRouteTable->table[i]) != ERROR_SUCCESS)</p><p><b>  {</b></p><p>  print

95、f("Could not delete old gateway \n");</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }<

96、/b></p><p>  MyFreeIpForwardTable(pIpRouteTable);</p><p><b>  }</b></p><p>  if(pRow != NULL)</p><p><b>  {</b></p><p>  // 設(shè)置dw

97、ForwardNextHop域?yàn)槲覀兊男戮W(wǎng)關(guān),所有其它的路由屬性將和先前的相同</p><p>  pRow->dwForwardNextHop = dwNewGateway;</p><p>  // 為默認(rèn)網(wǎng)關(guān)創(chuàng)建新的路由入口</p><p>  if(::SetIpForwardEntry(pRow) == NO_ERROR)</p>&l

98、t;p><b>  {</b></p><p>  printf(" Gateway changed successfully \n");</p><p>  printf(" The New Gateway is:192.168.0.1 \n");</p><p><b>  }<

99、/b></p><p><b>  else</b></p><p>  printf(" SetIpForwardEntry() failed \n");</p><p>  ::GlobalFree(pRow);</p><p><b>  }</b></p>

100、;<p><b>  getch();</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  PMIB_IPFORWARDTABLE MyGetIpForwardTable(BOOL bOrder)</p>

101、<p><b>  {</b></p><p>  PMIB_IPFORWARDTABLE pIpRouteTab = NULL;</p><p>  DWORD dwActualSize = 0;</p><p>  // 查詢所需緩沖區(qū)的大小</p><p>  if(::GetIpForwardTab

102、le(pIpRouteTab, &dwActualSize, bOrder) == ERROR_INSUFFICIENT_BUFFER)</p><p><b>  {</b></p><p>  // 為MIB_IPFORWARDTABLE結(jié)構(gòu)申請內(nèi)存</p><p>  pIpRouteTab = (PMIB_IPFORWARDTA

103、BLE)::GlobalAlloc(GPTR, dwActualSize);</p><p><b>  // 獲取路由表</b></p><p>  if(::GetIpForwardTable(pIpRouteTab, &dwActualSize, bOrder) == NO_ERROR)</p><p>  return pIpR

104、outeTab;</p><p>  ::GlobalFree(pIpRouteTab);</p><p><b>  }</b></p><p>  return NULL;</p><p><b>  }</b></p><p>  void MyFreeIpForwar

105、dTable(PMIB_IPFORWARDTABLE pIpRouteTab)</p><p><b>  {</b></p><p>  if(pIpRouteTab != NULL)</p><p>  ::GlobalFree(pIpRouteTab);</p><p><b>  }</b>

106、</p><p> ?。ㄎ澹┇@取網(wǎng)絡(luò)適配器列表</p><p>  圖7.獲取網(wǎng)絡(luò)適配器列表</p><p>  本功能實(shí)現(xiàn)的是獲取網(wǎng)絡(luò)適配器列表并打印其屬性信息,打印的信息包括了適配器名字,適配器目錄和適配器數(shù)目。具體的代碼如下:</p><p>  int main()</p><p><b>  {&l

107、t;/b></p><p>  PIP_INTERFACE_INFO pInfo = </p><p>  (PIP_INTERFACE_INFO)::GlobalAlloc(GPTR, sizeof(IP_INTERFACE_INFO));</p><p>  ULONG ulOutBufLen = sizeof(IP_INTERFACE_INFO);<

108、;/p><p>  // 如果上面申請的內(nèi)存不夠的話,再重新申請</p><p>  if(::GetInterfaceInfo(pInfo, &ulOutBufLen) == ERROR_INSUFFICIENT_BUFFER)</p><p><b>  {</b></p><p>  ::GlobalFree(

109、pInfo);</p><p>  pInfo = (PIP_INTERFACE_INFO)::GlobalAlloc(GPTR, ulOutBufLen);</p><p><b>  }</b></p><p>  // 再次調(diào)用GetInterfaceInfo來獲取我們實(shí)際需要的數(shù)據(jù)</p><p>  if(::

110、GetInterfaceInfo(pInfo, &ulOutBufLen) == NO_ERROR)</p><p><b>  {</b></p><p>  printf(" \tAdapter Name: %ws\n", pInfo->Adapter[0].Name);</p><p>  printf(

111、" \tAdapter Index: %ld\n", pInfo->Adapter[0].Index);</p><p>  printf(" \tNum Adapters: %ld\n", pInfo->NumAdapters);</p><p><b>  }</b></p><p>&l

112、t;b>  else</b></p><p><b>  {</b></p><p>  printf(" GetInterfaceInfo() failed \n");</p><p><b>  }</b></p><p>  ::GlobalFree(pI

113、nfo);</p><p><b>  getch();</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  五、設(shè)計(jì)總結(jié)</b></p><p>  

114、本次設(shè)計(jì)讓我學(xué)會了使用winsock進(jìn)行網(wǎng)絡(luò)的通信編程。本設(shè)計(jì)是基于c++的,讓我又重新溫習(xí)了一遍c++的知識,并對winsock有了具體的深刻的了解。設(shè)計(jì)中,遇到了很多的問題和不足,如功能的實(shí)現(xiàn)不完善,有些功能的方法寫錯(cuò)了,缺失頭文件等。但在堅(jiān)持不懈的努力下,也上網(wǎng)搜索了許多解決的方法,在諸多的嘗試后,終于一一解決了這些問題。但是本設(shè)計(jì)還是有很多不完善的地方,比如沒有一個(gè)完整的界面實(shí)現(xiàn),程序功能不完善等。本次設(shè)計(jì)讓我對這些能力有了更清

115、楚的認(rèn)識,并且也有了一定的提升。空有紙上談兵,即使再強(qiáng)也是沒用的,真正有用的實(shí)踐中對知識的運(yùn)用和掌握,以及本身解決問題的能力。</p><p><b>  六.參考文獻(xiàn)</b></p><p> ?。?)《Windows網(wǎng)絡(luò)與通信程序設(shè)計(jì)》 人民郵電出版社 王艷平 2009 </p><p>  (2)《Visual C++網(wǎng)絡(luò)通信開發(fā)入門

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論