网络程序设计实验报告-Winsock编程接口实验

  • 格式:doc
  • 大小:165.00 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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");