网络程序设计实验报告-Winsock编程接口实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
网络程序设计
实验报告
实验名称: Winsock编程接口实验
实验类型:____验证型实验_____ __
指导教师:______________________
专业班级:_____________________
姓名:_______________________
学号:_____________________
电子邮件:____________
实验地点:______ _______
实验日期2013 年 3 月29 日
实验成绩:__________________________
一、实验目的
●掌握Winsock的启动和初始化;
●掌握gethostname(),gethostbyname(),GetAdaptersInfo()等信息查询函数的使用。
二、实验设计
由实验内容可以知道:
1、编写程序能同时实现对多个域名的解析。比如在控制台输入:getip ,能输出和对应的IP地址列表。
2、编写程序获取并输出本地主机的所有适配器的IP地址,子网掩码,默认网关,MAC 地址。
首先要了解一些基本的知识gethostname(),gethostbyname(),GetAdaptersInfo()等信息查询函数的基本知识gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针。结构的声明与gethostaddr()中一致。
之后要根据内容画出函数流程图
三、实验过程(包含实验结果)
1.在实验过程中调用GetAdaptersInfo()时,出现了undeclared identifier的报错,原因是没有包含其头文件,之后进行一些修改解决了问题.
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(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(" 本机IP地址:%s \n ", szIp); }
argc--;
printf("**************************\n");