实验一 实验报告_实验报告实验一

2020-02-28 其他范文 下载本文

实验一 实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“实验报告实验一”。

网 络 程 序 设 实验报告

实验名称:Winsock编程接口实验 实验类型: 验 证 型

一、实验目的 掌握Winsock的启动和初始化;

 掌握gethostname(),gethostbyname(),GetAdaptersInfo()等信息查询函数的使用。

二、实验设计

实验内容:

1、编写程序能同时实现对多个域名的解析。比如在控制台输入:getip www.daodoc.com对应的IP地址列表。

2、编写程序获取并输出本地主机的所有适配器的IP地址,子网掩码,默认网关,MAC地址。

根据实验内容编写程序:

1、对相关域名进行解析,利用gethostbyname()完成解析,用到的结构体为:

struct hostent{ char FAR*

h_name;char FAR* FAR* h_aliases;short

h_addrtype;short

h_length;char FAR* FAR* h_addr_list;}

得到的IP地址列表由h_addr_list存储;

2、利用GetAdaptersInfo()函数获得本地主机的相关信息,通过IP_ADAPTER_INFO结构体返回所需信息。

IP_ADAPTER_INFO的定义如下: typedef struct _IP_ADAPTER_INFO {

struct _IP_ADAPTER_INFO* Next;

DWORD ComboIndex;

char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];

char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];

UINT AddreLength;

BYTE Addre[MAX_ADAPTER_ADDRESS_LENGTH];

DWORD Index;

UINT Type;

UINT DhcpEnabled;

PIP_ADDR_STRING CurrentIpAddre;

IP_ADDR_STRING IpAddreList;

IP_ADDR_STRING GatewayList;

IP_ADDR_STRING DhcpServer;

BOOL HaveWins;

IP_ADDR_STRING PrimaryWinsServer;

IP_ADDR_STRING SecondaryWinsServer;

time_t LeaseObtained;

time_t LeaseExpires;

} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;

三、实验过程(包含实验结果)

1、分析题目,编写程序;

2、将编写的程序进行编译、运行,输入题目给定的内容,完成题目要求; 结果如下:

第1题:

第2题:

四、讨论与分析

思考题:

1、Winsock初始化的作用:只有调用了WSAStartup()进行初始化之后,应用程 序才能调用其他Windows Sockets API函数,实现网络通信;

2、函数原型为:

DWORD GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo,//接受数据的缓冲区

PULONG pOutBufLen

// 数据的长度大小);

3、域名解析时出现域名对应多个IP,原因:该域名存在于多个服务器。

五、实验者自评

通过本次实验,我掌握了Winsock的启动和初始化以及gethostname(),gethostbyname(),GetAdaptersInfo()等函数查询的使用,加深了以前对课本知识的认识程度。

六、附录:关键代码(给出适当注释,可读性高)

第1题代码:

////////////////////////////////////////////////// // GetAllIps.cpp文件

//#include “../common/InitSock.h” #include #include #include

using namespace std;

#pragma comment(lib, “WS2_32”)// 链接到WS2_32.lib //CInitSock initSock;// 初始化Winsock库

void main(){

char szMeage[256];// 取得本地主机名称

// 初始化

WSADATA wsaData;if(WSAStartup(MAKEWORD(2,2), &wsaData)!= 0){

exit(0);}

// 通过主机名得到地址信息

printf(“ Get IP::”);gets(szMeage);

// 获取主机信息

hostent *pHost = ::gethostbyname(szMeage);

// 打印出所有IP地址

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(“ 服务器 %s IP地址:%s n ”,szMeage, szIp);

printf(“服务器名字: %s n”,pHost->h_name);}

/////////////////////////// ::WSACleanup();

}

第2题代码:

// 获取并输出本地主机的所有适配器的IP地址,子网掩码,默认网关,MAC地址

#include #include using namespace std;#include #pragma comment(lib, “IPHLPAPI.lib”)

void main(){ // 定义变量

IP_ADAPTER_INFO *pAdapterInfo;ULONG ulOutBufLen;DWORD dwRetVal;PIP_ADAPTER_INFO pAdapter;

pAdapterInfo =(IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));ulOutBufLen = sizeof(IP_ADAPTER_INFO);// 第一次获取适配器信息,得到ulOutBufLen的实际大小

if(GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)!= ERROR_SUCCESS){

free(pAdapterInfo);

pAdapterInfo =(IP_ADAPTER_INFO *)malloc(ulOutBufLen);} // 第二次获取适配器信息,获得了pAdapterInfo信息

if(dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)!= ERROR_SUCCESS){

cout

// 打印MAC地址信息、子网掩码以及网关

pAdapter = pAdapterInfo;while(pAdapter){

cout

";

for(int i=0;i

AddreLength;i++)

{

if(i ==(pAdapter->AddreLength-1))

{

coutAddre[i];

}

else

{

coutAddre[i]

}

}

cout

coutIpAddreList.IpAddre.String

coutIpAddreList.IpMask.String

coutIpAddreList.IpAddre.String

cout

pAdapter = pAdapter->Next;}

// 释放资源

if(pAdapterInfo){

free(pAdapterInfo);} cout

}

《实验一 实验报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
实验一 实验报告
点击下载文档
相关专题 实验报告实验一 实验报告 实验报告实验一 实验报告
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文