网络程序设计实验报告实验名称:Winsock编程接口实验实验类型:____验证型实验_______指导教师:______________________专业班级:_____________________姓名:_______________________学号:_____________________电子邮件:____________实验地点:_____________实验日期2013年3月29日实验成绩:__________________________一、实验目的掌握Winsock的启动和初始化;掌握gethostname(),gethostbyname(),GetAdaptersInfo()等信息查询函数的使用。二、实验设计由实验内容可以知道:1、编写程序能同时实现对多个域名的解析。比如在控制台输入:getip,能输出地址列表。2、编写程序获取并输出本地主机的所有适配器的IP地址,子网掩码,默认网关,MAC地址。首先要了解一些基本的知识gethostname(),gethostbyname(),GetAdaptersInfo()等信息查询函数的基本知识gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针。结构的声明与gethostaddr()中一致。之后要根据内容画出函数流程图StartInputChooseInputorderInputIDIfIfReturnShowinformationGetIDReturnOverYesYesNoNo三、实验过程(包含实验结果)1.在实验过程中调用GetAdaptersInfo()时,出现了undeclaredidentifier的报错,原因是没有包含其头文件,之后进行一些修改解决了问题.2.实验结果3.选择查看本机信息四、讨论与分析1.Winsock初始化的作用是什么?答:使用winsock初始化可加载winsock编程的动态链接库。2.给出GetAdaptersInfo()函数的正确使用方法。GetAdaptersInfo函数使用方法:1.包含头文件IpHlpApi.h,其库文件为IpHlpApi.lib(已将安装SDK,并将其连接至VC)2.声明一个IP_ADAPTER_INFO结构指针变量pAdapterInfo,一个ULONG变量ulOutBufLen。这些变量作为参数传递给GetAdaptersInfo函数;3.为结构分配内存;4.第一次调用GetAdaptersInfo获取适当的ulOutBufLen变量大小;5.第二次调用传递pAdapterInfo,ulOutBufLen作为参数,调用成功时返回网卡信息,失败时返回错误信息。3.域名解析时出现域名对应多个IP,请解释原因。大型网站具有多个IP,这是因为其访问量大,使用多个IP保持负载均衡。所以要使用多个IP同时也可以提高系统吞吐量五、实验者自评刚开始的时候对Winsock编程不是很了解,然后看了书中的知识后大概了解了许多关于Winsock编程基本接口的知识,而且在实验过程中有许多的问题,例如最后显示本机IP地址的时候还需要将debug中的应用程序放入到c盘中,之后尝试了好多次程序就可以运行了,不过,最后终于是写好了,还有些关于套接字的程序书中也有参考的,可以仿照那个去修改一下自己的代码,看看自己的有哪些不足之处,程序写的好的要求是尽量减小系统的利用率,增大系统吞吐量,可以使系统有更高的运行效率。这次实验是一个简单些的验证型实验,但是对于Winsock编程是一些基础知识,只要先打好了基础知识才可以对于后面的实验能运用自如,所以,以后有时间的时候也要去看书多了解关于这方面的知识。实验设计的时候还是比较简单的,就是过程有一点繁琐啦!六、附录:关键代码while(argc1){hostent*pHost=::gethostbyname(*++argv);//打印出所有IP地址printf(jiexiyuming%s\n,*argv);in_addraddr;for(inti=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(本机IP地址:%s\n,szIp);}argc--;printf(**************************\n);