实验一 实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“实验报告实验一”。
网 络 程 序 设 实验报告
实验名称: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
}
实验一 认识电子商务一、实验目的通过因特网了解三种电子商务交易模式,了解互联网广告体系,体验和对比各类电子商务网站的运营模式和流程。二、实验环境接入因特网。三、实验......
双绞线制作结论1、实验目的熟悉双绞线的制作过程2、实验要求使用压线钳,灵活制作直通线、交叉线,并符合做线标准2、实验用到的设备、仪器实验用到的设备仪器有:5类双绞线一根、......
实验一 SQL SERVER 2008环境一、实验目的1、了解SQL SERVER 2008的安装过程中的关键问题;2、掌握通过SQL Server Management Studio管理数据库服务器、操作数据库对象的方法;3......
实验一交换机的配置一、VLAN的配置1.1实验目标1.掌握交换机基本信息的配置管理。2.理解虚拟LAN(VLAN)基本配置;3.掌握一般交换机按端口划分VLAN的配置方法; 4.掌握Tag VLAN配......
《外汇交易》实验报告实验项目名称:外汇银行报价学生姓名:专业:学号:实验地点:实验楼C347实验日期:2010年9月23日一、实验目的(一)了解外汇模拟交易系统的构成(二)熟悉外汇交易的常见......