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
发布评论