计算机网络课程设计报告(2)

2019-08-17 13:25

关键代码:

//初始化WinSock

WSADATA WSAData;

if (WSAStartup(MAKEWORD(2, 0), &WSAData) != 0) { }

//获得本地计算机主机名称 CString strName = _T(\);

gethostname(strName.GetBuffer(1024), 1024); strName.ReleaseBuffer();

struct hostent* pHostEnt = gethostbyname(strName); if(pHostEnt == NULL) { }

//获得本地计算机IP地址 CString strText = _T(\);

strText += _T(\本地计算机的IP地址:\\n\); int n = 0;

while (pHostEnt->h_addr_list[n] != NULL) {

CString strTemp = _T(\);

strTemp.Format(_T(\), (pHostEnt->h_addr_list[n][0] & 0x00FF), return; return;

(pHostEnt->h_addr_list[n][1] & 0x00FF), (pHostEnt->h_addr_list[n][2] & 0x00FF), (pHostEnt->h_addr_list[n][3] & 0x00FF));

}

AfxMessageBox(strText); //清理WinSock WSACleanup();

strText += strTemp; n++;

运行结果:

6

图3 主机IP

5.3 MAC地址模块设计

添加按钮button并设置其caption为“MAC地址” ,使用getadaptersinfo()获取网卡信息。结构体IP_ADAPTER_INFO包含本地计算机某一个网络适配器的信息。 关键代码:

DWORD nLength = 0;

if (GetAdaptersInfo(NULL, &nLength) != ERROR_BUFFER_OVERFLOW) {

return;

} IP_ADAPTER_INFO* pAdapterInfo = (IP_ADAPTER_INFO*)new BYTE[nLength]; //获得本地

计算机网卡信息

if (GetAdaptersInfo(pAdapterInfo, &nLength) != ERROR_SUCCESS) { }

//获得本地计算机MAC地址

CString strText = _T(\本地计算机的MAC地址:\\n\); IP_ADAPTER_INFO * pCurrentAdapterInfo = pAdapterInfo; while (pCurrentAdapterInfo != NULL) {

//获得每个网卡的MAC地址 CString strTemp = _T(\);

strTemp.Format(_T(\), delete[] pAdapterInfo; return;

pCurrentAdapterInfo->Address[0], pCurrentAdapterInfo->Address[1], pCurrentAdapterInfo->Address[2], pCurrentAdapterInfo->Address[3],

7

pCurrentAdapterInfo->Address[4], pCurrentAdapterInfo->Address[5]);

}

AfxMessageBox(strText); delete[] pAdapterInfo;

strText += strTemp;

pCurrentAdapterInfo = pCurrentAdapterInfo->Next;

运行结果:

图 4 MAC地址

5.4 DNS模块设计

添加按钮button并设置其caption为“DNS”,要用到的函数是DWORD GetNetworkParams(PFIXED_INFO pFixedInfo,PULONG pOutBufLen) 参数及其功能说明如下:

pFixedInfo :输出指向FIXED_INFO结构的指针,该结构是用来获取本地计算机的网络参数。

pOutBufLen :输入指向一个ULONG变量的指针,该ULONG变量指向pFixedInfo结构的大小。

功能:函数GetNetworkParams()可以获取本地计算机的网络参数,从而获得计算机的DNS设置。成功,返回TRUE;失败,返回FALSE。该函数在头文件“Iphlpapi.h”中声明,由库文件“Iphlpapi.lib”来支持。 关键代码:

FIXED_INFO * FixedInfo;

ULONG ulOutBufLen; DWORD dwRetVal;

8

//IP_ADDR_STRING描述IP 地址链表的节点。 IP_ADDR_STRING * pIPAddr;

FixedInfo = (FIXED_INFO *)GlobalAlloc(GPTR, sizeof(FIXED_INFO)); ulOutBufLen = sizeof(FIXED_INFO); //获取本机网络参数 GetNetworkParams

if (ERROR_BUFFER_OVERFLOW == GetNetworkParams(FixedInfo, &ulOutBufLen)) {

GlobalFree(FixedInfo);

FixedInfo = (FIXED_INFO *)GlobalAlloc(GPTR, ulOutBufLen); if (dwRetVal = GetNetworkParams(FixedInfo, &ulOutBufLen)) { } else {

CString strHostName;

CString strDomainName; strDomainName.Format(\域名:%s\, printf(\获取网络参数失败.返回值: x\\n\, dwRetVal);

FixedInfo->DomainName);

} }

CString strDNS; //DnsServerList 本机采用的DNS服务器链表

strDNS.Format(\服务器:%s\, FixedInfo->DnsServerList.IpAddress.String); CString str;

str.Format(\, strHostName, strDomainName, strDNS); MessageBox(str);

pIPAddr = FixedInfo->DnsServerList.Next; while (pIPAddr) { CString strIPAddr; }

strIPAddr.Format(\备选DNS服务器是:%s\, pIPAddr->IpAddress.String); MessageBox(strIPAddr); pIPAddr = pIPAddr->Next;

9

运行结果:

图 5 DNS

图 6 备选DNS 1 图 6 备选DNS1

图 7备选DNS2

5.5 网络协议模块设计

添加按钮button并设置其caption为“网络协议”WSADATA结构被用来储存调用AfxSocketInit全局函数返回的Windows Sockets初始化信息。这个结构被用来存储被WSAStartup函数调用后返回的Windows Sockets数据。它包含Winsock.dll执行的数据。

WSAStartup,是Windows Sockets Asynchronous的启动命令、Windows下的

10


计算机网络课程设计报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:土样的分类

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: