2023年12月15日发(作者:)

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

2010年11月22日 星期一 21:59

一、创建对话框应用程序

二、编辑对话框资源

控件ID及标题

IDC_LIST_IP

IDC_GETOTHERIP

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

三、添加变量、函数

1、添加变量

2、添加消息响应函数

四、添加代码

1、于“”文件内添加包含语句

#include "stdafx.h"

#include "GetOtherIP.h"

#include "GetOtherIPDlg.h"

#include

2、于“”文件内添加消息响应函数代码

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;

("局域网内的计算机名称及其IP地址为:");

m_ing(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 == (2).Compare("") )

strFullName =

(gth()-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

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

(" 计算机%d名称:%s-->IP地址:%d.%d.%d.%drn", i,strFullName,a,b,c,d);

m_ing(strTemp);

}

}

} //for 循环结束

delete Buffer;

WNetCloseEnum( hEnum );

} //第一层 if 结束

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

}

五、添加对象/库模块

点“工程”,点“设置”,点选“连接”,添加“

ws2_.”模块。

六、编译

七、运行

七、函数说明

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:指定枚举条目数量。

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