網(wǎng)絡(luò)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告-Winsock編程接口實(shí)驗(yàn)
網(wǎng)絡(luò)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱: Winsock 編程接口實(shí)驗(yàn)實(shí)驗(yàn)類型:____驗(yàn)證型實(shí)驗(yàn)_____ __ 指導(dǎo)教師:______________________ 專業(yè)班級:____
網(wǎng)絡(luò)程序設(shè)計(jì)
實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)名稱: Winsock 編程接口實(shí)驗(yàn)
實(shí)驗(yàn)類型:____驗(yàn)證型實(shí)驗(yàn)_____ __ 指導(dǎo)教師:______________________ 專業(yè)班級:_____________________ 姓 名:_______________________ 學(xué) 號:電子郵件:____________
實(shí)驗(yàn)地點(diǎn):______ _______
實(shí) 驗(yàn) 日 期 2013 年 3 月 29 日
實(shí)驗(yàn)成績:__________________________
,一、實(shí)驗(yàn)?zāi)康?/p>
● 掌握Winsock 的啟動和初始化;
● 掌握gethostname(),gethostbyname(),GetAdaptersInfo()等信息查詢函數(shù)的使用。
二、實(shí)驗(yàn)設(shè)計(jì)
由實(shí)驗(yàn)內(nèi)容可以知道:
1、編寫程序能同時實(shí)現(xiàn)對多個域名的解析。比如在控制臺輸入:getip www.163.com www.swust.edu.cn , 能輸出www.163.com 和 www.swust.edu.cn 對應(yīng)的IP 地址列表。
2、編寫程序獲取并輸出本地主機(jī)的所有適配器的IP 地址,子網(wǎng)掩碼,默認(rèn)網(wǎng)關(guān),MAC 地址。
首先要了解一些基本的知識gethostname(),gethostbyname(),GetAdaptersInfo()等信息查詢函數(shù)的基本知識gethostbyname()返回對應(yīng)于給定主機(jī)名的包含主機(jī)名字和地址信息的hostent 結(jié)構(gòu)指針。結(jié)構(gòu)的聲明與gethostaddr()中一致。
之后要根據(jù)內(nèi)容畫出函數(shù)流程圖
三、實(shí)驗(yàn)過程(包含實(shí)驗(yàn)結(jié)果)
1. 在實(shí)驗(yàn)過程中調(diào)用GetAdaptersInfo ()時,出現(xiàn)了undeclared identifier的報(bào)錯,原因是沒有包含其頭文件, 之后進(jìn)行一些修改解決了問題.
2. 實(shí)驗(yàn)結(jié)果
3. 選擇查看本機(jī)信息
四、討論與分析
1.Winsock 初始化的作用是什么?
答:使用winsock 初始化可加載winsock 編程的動態(tài)鏈接庫。
,2.給出GetAdaptersInfo ()函數(shù)的正確使用方法。
GetAdaptersInfo 函數(shù)使用方法:
1. 包含頭文件IpHlpApi.h, 其庫文件為IpHlpApi.lib(已將安裝SDK, 并將其連接至VC)
2. 聲明一個 IP_ADAPTER_INFO 結(jié)構(gòu)指針變量 pAdapterInfo, 一個 ULONG 變量 ulOutBufLen 。這些變量作為參數(shù)傳遞給 GetAdaptersInfo 函數(shù);
3. 為結(jié)構(gòu)分配內(nèi)存;
4. 第一次調(diào)用 GetAdaptersInfo 獲取適當(dāng)?shù)?ulOutBufLen 變量大小;
5. 第二次調(diào)用傳遞 pAdapterInfo,ulOutBufLen 作為參數(shù), 調(diào)用成功時返回網(wǎng)卡信息, 失敗時返回錯誤信息。
3.域名解析時出現(xiàn)域名對應(yīng)多個IP ,請解釋原因。
大型網(wǎng)站具有多個IP ,這是因?yàn)槠湓L問量大,使用多個IP 保持負(fù)載均衡。所以要使用多個IP 同時也可以提高系統(tǒng)吞吐量
五、實(shí)驗(yàn)者自評
剛開始的時候?qū)insock 編程不是很了解,然后看了書中的知識后大概了解了許多關(guān)于Winsock 編程基本接口的知識,而且在實(shí)驗(yàn)過程中有許多的問題,例如最后顯示本機(jī)IP 地址的時候還需要將debug 中的應(yīng)用程序放入到c 盤中,之后嘗試了好多次程序就可以運(yùn)行了,不過,最后終于是寫好了,還有些關(guān)于套接字的程序書中也有參考的,可以仿照那個去修改一下自己的代碼,看看自己的有哪些不足之處,程序?qū)懙暮玫囊笫潜M量減小系統(tǒng)的利用率,增大系統(tǒng)吞吐量,可以使系統(tǒng)有更高的運(yùn)行效率。
這次實(shí)驗(yàn)是一個簡單些的驗(yàn)證型實(shí)驗(yàn),但是對于Winsock 編程是一些基礎(chǔ)知識,只要先打好了基礎(chǔ)知識才可以對于后面的實(shí)驗(yàn)?zāi)苓\(yùn)用自如,所以,以后有時間的時候也要去看書多了解關(guān)于這方面的知識。實(shí)驗(yàn)設(shè)計(jì)的時候還是比較簡單的,就是過程有一點(diǎn)繁瑣啦! 六、附錄:關(guān)鍵代碼
while(argc>1) { hostent *pHost = ::gethostbyname(* argv); // 打印出所有IP 地址 printf("jiexiyuming s n",*argv); in_addr addr; for(int i = 0; ; i ) { char *p = pHost->h_addr_list[i]; if(p == NULL) break; memcpy(&addr.S_un.S_addr, p, pHost->h_length); char *szIp = ::inet_ntoa(addr);
,printf(" 本機(jī)IP 地址:s n ", szIp); } argc--; printf("**************************n");