实验一Winsock编程接口实验.docx

上传人:b****8 文档编号:27711806 上传时间:2023-07-04 格式:DOCX 页数:12 大小:97.58KB
下载 相关 举报
实验一Winsock编程接口实验.docx_第1页
第1页 / 共12页
实验一Winsock编程接口实验.docx_第2页
第2页 / 共12页
实验一Winsock编程接口实验.docx_第3页
第3页 / 共12页
实验一Winsock编程接口实验.docx_第4页
第4页 / 共12页
实验一Winsock编程接口实验.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验一Winsock编程接口实验.docx

《实验一Winsock编程接口实验.docx》由会员分享,可在线阅读,更多相关《实验一Winsock编程接口实验.docx(12页珍藏版)》请在冰豆网上搜索。

实验一Winsock编程接口实验.docx

实验一Winsock编程接口实验

实验一--Winsock编程接口实验

网络程序设计

实验报告

实验名称:

winsock编程接口实验__________

实验类型:

验证型实验_________

指导教师:

贾浩___________________

专业班级:

信安0904_________________

姓名:

_谌军________________________

学号:

_20092036___________________

电子邮件:

_448149700@__________

实验地点:

_东六a座4--17______________

实验日期:

  2012年 3月11日

 

实验成绩:

__________________________

 

 

2、要得到本地主机的所有适配器的IP地址,子网掩码,默认网关,MAC地址等信息,主要是对GetAdaptersInfo()函数的理解和应用。

该函数可以获取本地主机的所有适配器信息,并保存在pAdapterInfo所指向的链表中。

函数原型为:

DWORDGetAdaptersInfo(

PIP_ADAPTER_INFOpAdapterInfo,//buffertoreceivedata

PULONGpOutBufLen//sizeofdatareturned

);

IP_ADAPTER_INFO的定义如下:

typedefstruct_IP_ADAPTER_INFO{

struct_IP_ADAPTER_INFO*Next;

DWORDComboIndex;

charAdapterName[MAX_ADAPTER_NAME_LENGTH+4];

charDescription[MAX_ADAPTER_DESCRIPTION_LENGTH+4];

UINTAddressLength;

BYTEAddress[MAX_ADAPTER_ADDRESS_LENGTH];

DWORDIndex;

UINTType;

UINTDhcpEnabled;

PIP_ADDR_STRINGCurrentIpAddress;

IP_ADDR_STRINGIpAddressList;

IP_ADDR_STRINGGatewayList;

IP_ADDR_STRINGDhcpServer;

BOOLHaveWins;

IP_ADDR_STRINGPrimaryWinsServer;

IP_ADDR_STRINGSecondaryWinsServer;

time_tLeaseObtained;

time_tLeaseExpires;

}IP_ADAPTER_INFO,*PIP_ADAPTER_INFO;

通过调用该函数就可以得到所有适配器信息。

流程图如下:

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

1.实验步骤如下:

(1)建立一个C++程序工程,并建立同名的C++文件;

(2)将教材上获取本机IP等信息代码输入;

(3)将:

:

gethostname(szHost,256)改为cout<<”请输入主机名”<>szHost;

(4)为主函数中的所有代码加上while循环,从而实验多次域名的输入。

(5)编译,调试,运行程序,检验程序运行结果。

(6)思考,分析实验结果,编写实验报告。

实验编译及链接错误:

无。

解决方案:

无。

实验结果:

如下截图结果

2.实验步骤如下:

(1)建立名为LocalHostInfo的一个C++程序工程,并建立同名的文件;

(2)将教材上获取本机ip地址,子网掩码,网关ip和本机MAC地址代码录入;

(3)编译,调试,运行程序,检验程序运行结果。

(4)思考,分析实验结果,编写实验报告。

实验编译及链接错误:

无。

解决方案:

无。

实验结果:

如下截图为运行程序后的结果:

四、讨论与分析

1)Winsock初始化的作用是什么?

答:

作用是为了式程序能够使用一些底层的API函数,用来完成功能

2)给出GetAdaptersInfo()函数的正确使用方法

DWORDGetAdaptersInfo(PIP_ADAPTER_INFOpAdapterInfo,//指向一个缓冲区,用来取得IP_ADAPTER_INFO结构的列表

PULONGpOutBufLen//用来指定上面的缓冲区的大小,如果大小不够,此参数返回所需大小

)//函数调用成功返回ERROR_SUCCESS

3)域名解析时出现域名对应多个IP,请解释原因。

因为一台主机上可能会对应多个IP地址如(笔记本上的无线网卡上对应了一个IP地址而在有线上也对应了一个IP地址)

五、实验者自评(从实验设计、实验过程、对实验知识点的理解上给出客观公正的自我评价)

这次实验使我对书本上的知识有了更深的理解,对于这些重要的API函数的调用也有了一个更加明确的理解,除此之外,我还对套接字、端口、IP地址之间的关系有了初步的理解,

在以后的实验中,我会更加对书上的代码进行研究,充分的理解其中的关键要素!

六、附录:

关键代码(给出适当注释,可读性高)

#include

#include

#pragmacomment(lib,"WS2_32")

classCInitSock

{

public:

CInitSock(BYTEminorVer=2,BYTEmajorVer=2)

{

//初始化Winsock

WSADATAwsaData;

WORDsockVersion=MAKEWORD(minorVer,majorVer);

if(:

:

WSAStartup(sockVersion,&wsaData)!

=0)

{

exit(0);//初始化失败,退出程序

}

}

~CInitSock()

{

:

:

WSACleanup();//释放Winsock资源

}

};

intmain(intargc,char**argv)

{

CInitSockinitSock;

charszHost[256];

while(printf("输入域名:

"))

{

//通过域名得到地址信息

scanf("%s",&szHost);

if(szHost==0)

{

break;

}

hostent*pHost=:

:

gethostbyname(szHost);

//打印出所有IP地址

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);

}

}

printf("\n");

return0;

}

#include

#include

#include"Iphlpapi.h"

#pragmacomment(lib,"Iphlpapi.lib")

#pragmacomment(lib,"WS2_32.lib")

/////////////////////////////////////////

//全局数据

u_charg_ucLocalMac[6];//本地MAC地址

DWORDg_dwGatewayIP;//网关IP地址

////////////////////

DWORDg_dwGatewayIP1;

DWORDg_dwLocalIP;//本地IP地址

DWORDg_dwMask;//子网掩码

char*szAdapterName;

char*szAdapterDescription;

BOOLGetGlobalData()

{

PIP_ADAPTER_INFOpAdapterInfo=NULL;

ULONGulLen=0;

//为适配器结构申请内存

:

:

GetAdaptersInfo(pAdapterInfo,&ulLen);

pAdapterInfo=(PIP_ADAPTER_INFO):

:

GlobalAlloc(GPTR,ulLen);

//取得本地适配器结构信息

if(:

:

GetAdaptersInfo(pAdapterInfo,&ulLen)==ERROR_SUCCESS)

{

if(pAdapterInfo!

=NULL)

{

memcpy(g_ucLocalMac,pAdapterInfo->Address,6);

szAdapterName=pAdapterInfo->AdapterName;

szAdapterDescription=pAdapterInfo->Description;

g_dwGatewayIP=:

:

inet_addr(pAdapterInfo->GatewayList.IpAddress.String);

g_dwLocalIP=:

:

inet_addr(pAdapterInfo->IpAddressList.IpAddress.String);

g_dwMask=:

:

inet_addr(pAdapterInfo->IpAddressList.IpMask.String);

g_dwGatewayIP1=:

:

inet_addr(pAdapterInfo->Next->IpAddressList.IpAddress.String);

}

}

printf("\n--------------------本地主机信息-----------------------\n\n");

in_addrin;

in.S_un.S_addr=g_dwLocalIP;

in_addrin1;

in1.S_un.S_addr=g_dwGatewayIP1;

printf("IPAddress:

%s\n",:

:

inet_ntoa(in));

in.S_un.S_addr=g_dwMask;

printf("SubnetMask:

%s\n",:

:

inet_ntoa(in));

in.S_un.S_addr=g_dwGatewayIP;

printf("DefaultGateway:

%s\n",:

:

inet_ntoa(in));

u_char*p=g_ucLocalMac;

printf("MACAddress:

%02X-%02X-%02X-%02X-%02X-%02X\n",p[0],p[1],p[2],p[3],p[4],p[5]);

printf("适配器名称:

%s\n",szAdapterName);

printf("适配器描述:

%s\n",szAdapterDescription);

/////////////////////////////

printf("有线适配器ip地址:

%s\n",inet_ntoa(in1));

printf("\n\n");

returnTRUE;

}

intmain()

{

//获取全局数据

GetGlobalData();

getchar();

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1