您的当前位置:首页正文

VC之网络通信技术之获取局域网其它计算机IP地址

2021-07-09 来源:意榕旅游网
VC之网络通信技术之获取局域网其他计算机IP地址

VC++之网络通信技术之获取局域网其他计算机的 2021 年 11 月 22 日 星期一 21:59 一、创立对话框应用程序

IP 地址

二、编写对话框资源 控件 ID 及标题 IDC_LIST_IP

IDC_GETOTHERIP

获取局域网其他计算机的 IP 地址 ( 属性有“浮动〞)

三、增加变量、函数

1 、增加变量

VC之网络通信技术之获取局域网其他计算机IP地址

2 、增加信息响应函数

四、增加代码

1 、于“ GetOtherIPDlg.cpp 〞文件内增加包含语句

#include \"stdafx.h\"

#include \"GetOtherIP.h\"

#include \"GetOtherIPDlg.h\"

#include

VC之网络通信技术之获取局域网其他计算机IP地址

2 、于“ GetOtherIPDlg.cpp 〞文件内增加信息响应函数代

void CGetOtherIPDlg::OnGetotherip() {

// TODO: Add your control notification handler code here struct hostent *host; struct in_addr *ptr; // 检索 IP 地址

DWORD dwScope = RESOURCE_CONTEXT; NETRESOURCE *NetResource = NULL; HANDLE hEnum;

WNetOpenEnum( dwScope, NULL, NULL, NULL, &hEnum ); WSADATA wsaData;

WSAStartup(MAKEWORD(1,1),&wsaData); CString strTemp; if ( hEnum ) {

DWORD Count = 0xFFFFFFFF; DWORD BufferSize = 2048;

LPVOID Buffer = new char[2048];

WNetEnumResource( hEnum, &Count, Buffer, &BufferSize ); NetResource = (NETRESOURCE*)Buffer;

strTemp.Format(\" 局域网内的计算机名称及其 IP 地址为: \"); m_ListIP.AddString(strTemp); char szHostName[200]; unsigned int i;

for ( i = 0; i < BufferSize/sizeof(NETRESOURCE); i++, NetResource++ ) {

if ( NetResource->dwUsage == RESOURCEUSAGE_CONTAINER && NetResource->dwType == RESOURCETYPE_ANY ) {

if ( NetResource->lpRemoteName ) {

CString strFullName = NetResource->lpRemoteName; if ( 0 == strFullName.Left(2).Compare(\"\\\\\\\\\") )

strFullName =

strFullName.Right(strFullName.GetLength()-2);

//gethostname( szHostName, strlen( szHostName ) ); host = gethostbyname(strFullName); if(host == NULL) continue; ptr = (struct in_addr

*)host->h_addr_list[0];

// =. 分分开 IP:211.40.35.76.

int a = ptr->S_un.S_un_b.s_b1; // 211

VC之网络通信技术之获取局域网其他计算机IP地址

int b = ptr->S_un.S_un_b.s_b2; // 40 int c = ptr->S_un.S_un_b.s_b3; // 35 int d = ptr->S_un.S_un_b.s_b4; // 76

strTemp.Format(\" 计算机 %d名称: %s-->IP 地

址: %d.%d.%d.%d\\r\\n\

m_ListIP.AddString(strTemp); } } } //for 循环结束 delete Buffer;

WNetCloseEnum( hEnum );

} // 第一层 if 结束

WSACleanup(); // 调用 WSACleanup函数进行 WinSock 的清理工作,以便释放其 占用的资源 }

五、增加对象 / 库模块

点“工程〞,点“设置〞,点选“连接〞,增加“ MPR.LIB

ws2_32.lib. 〞模块。

六、编译

七、运行

VC之网络通信技术之获取局域网其他计算机IP地址

七、函数说明

1 、WNetOpenEnum函数声明

DWORD WNetOpenEnum(DWORD dwScope,DWORD

dwType,DWORD dwUsage,LPNETRESOURCE lpNetResource,LPHANDKE lphEnum)

dwScope:指定列举范围。 dwType:指定列举资源种类。

dwUsage:指定列举资源用法。第一个参数 dwScope为

RESOURCE_GLOBALNET,那么该参数被勿略。

lpNetResource :指向包含列举资源相关信息之

NETRESOURCE结构的指针。

lphEnum:指向列举变量之句柄指针,为调用

WNetEnumResource()函数做准备。

功能:开始一网络资源或存在的网络连接列举值。成功那

么返回非零值;失败那么返回 FALSE。

2 、WNetEnumResource函数声明

DWORD WNetEnumResource(HANDLE

hEnum,LPDWORD lpcCount,LPVOID lpBuffer,LPDWORD lpBufferSize)

hEnum:WNetOpenEnum()函数返回的表记某列举实例之句

柄。

lpcCount :指定列举条目数量。

VC之网络通信技术之获取局域网其他计算机IP地址

lpBuffer :指向获取列举结果之缓冲区指针,用

NETRESOURCE结构数组表示。

lpBufferSize :指定上述缓冲区大小。

功能:获取详细网络资源信息。

3 、NETRESOURCE结构定义 typedef struct_NETRESOURCE{

DWORD

dwScope;

// 指定列举范围

DWORD

dwType;

//

DWORD

dwDisplayType;

DWORD

dwUsage;

// 指定列举资源用法

DWORD

dwScopeLocalname;

DWORD

dwRemoteName;

// 指向网络中远程计算机名

DWORD

dwComment;

DWORD

dwPrivider;

}NETRESOURCE

指定列举资源种类

因篇幅问题不能全部显示,请点此查看更多更全内容