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 指定列举资源种类 因篇幅问题不能全部显示,请点此查看更多更全内容