版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)通信winsock課程設(shè)計(jì)
- 網(wǎng)絡(luò)通信課程設(shè)計(jì)
- 網(wǎng)絡(luò)通信課程設(shè)計(jì)--公寓網(wǎng)絡(luò)設(shè)計(jì)
- c++課程設(shè)計(jì)--通信錄管理程序
- 基于tcpip協(xié)議的網(wǎng)絡(luò)通信應(yīng)用程序課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)--數(shù)字相片管理程序
- 課程設(shè)計(jì)---圖書登記管理程序
- 課程設(shè)計(jì)--數(shù)字相片管理程序.doc
- 高級語言課程設(shè)計(jì)---教務(wù)管理程序
- c課程設(shè)計(jì)--參會人員管理程序
- c++課程設(shè)計(jì)(凌世林組)通信錄管理程序
- c++課程設(shè)計(jì)--學(xué)生社團(tuán)管理程序
- 《計(jì)算機(jī)網(wǎng)絡(luò)與通信》課程設(shè)計(jì)--獲取主機(jī)名和ip地址
- 基于gui的網(wǎng)絡(luò)通信程序設(shè)計(jì)
- 學(xué)生學(xué)習(xí)成績管理程序課程設(shè)計(jì)報(bào)告
- 郵件地址提取程序課程設(shè)計(jì)報(bào)告
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)----編寫實(shí)現(xiàn)點(diǎn)分十進(jìn)制的ip地址程序
- c++課程設(shè)計(jì)--參會人員信息管理程序
- 高級語言課程設(shè)計(jì)--個(gè)人物品管理程序
- c語言課程設(shè)計(jì)--學(xué)生成績簡單管理程序
評論
0/150
提交評論