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

VC++之网络通信技术之获取局域网其它计算机的IP地址
2010年11月22日星期一 21:59
一、创建对话框应用程序
二、编辑对话框资源
控件ID及标题
IDC_LIST_IP
IDC_GETOTHERIP
获取局域网其它计算机的IP地址(属性有“浮动”)
三、添加变量、函数
1、添加变量
2、添加消息响应函数
四、添加代码
1、于“GetOtherIPDlg.cpp”文件内添加包含语句
#include "stdafx.h"
#include "GetOtherIP.h"
#include "GetOtherIPDlg.h"
#include <Winsock2.h>
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
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", i,strFullName,a,b,c,d);
m_ListIP.AddString(strTemp);
}
}
} //for 循环结束
delete Buffer;
WNetCloseEnum( hEnum );
} //第一层 if 结束
WSACleanup(); //调用WSACleanup函数进行WinSock的清理工作,以便释放其占用的资源
}
五、添加对象/库模块
点“工程”,点“设置”,点选“连接”,添加“MPR.LIB ws2_32.lib.”模块。

六、编译
七、运行
七、函数说明
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。

合集下载

五招教你查出对方IP地址

五招教你查出对方IP地址

五招教你查出对方IP地址与好友在网络上相互传输资料时,有时先要知道对方计算机的IP 地址,才能与对方建立信息传输通道。

那么对方的IP地址该如何搜查得到呢?这样的问题你也许会嗤之以鼻,的确,查询对方计算机的IP地址,实在简单得不值得一提;可是,要让你列举出多种IP地址搜查方法时,你可能就感到勉为其难了。

下面,本文就对如何快速、准确地搜查出对方好友的计算机IP地址,提出如下几种方法,相信能对大家有所帮助!1、邮件查询法使用这种方法查询对方计算机的IP地址时,首先要求对方先给你发一封电子邮件,然后你可以通过查看该邮件属性的方法,来获得邮件发送者所在计算机的IP地址;下面就是该方法的具体实施步骤:首先运行OutLook express程序,并单击工具栏中的“接受全部邮件”按钮,将朋友发送的邮件接受下来,再打开收件箱页面,找到朋友发送过来的邮件,并用鼠标右键单击之,从弹出的右键菜单中,执行“属性”命令;在其后打开的属性设置窗口中,单击“详细资料”标签,并在打开的标签页面中,你将看到“Received:from xiecaiwen (unknown [11.111.45.25])”这样的信息,其中的“11.111.45.25”就是对方好友的IP地址;当然,要是对方好友通过Internet中的WEB 信箱给你发送电子邮件的话,那么你在这里看到的IP地址其实并不是他所在工作站的真实IP地址,而是WEB信箱所在网站的IP地址。

当然,如果你使用的是其他邮件客户端程序的话,查看发件人IP 地址的方法可能与上面不一样;例如要是你使用foxmail来接受好友邮件的话,那么你可以在收件箱中,选中目标邮件,再单击菜单栏中的“邮件”选项,从弹出的下拉菜单中选中“原始信息”命令,就能在其后的界面中看到对方好友的IP地址了。

2、日志查询法这种方法是通过防火墙来对QQ聊天记录进行实时监控,然后打开防火墙的日志记录,找到对方好友的IP地址。

cc++实现获取域名的IP地址

cc++实现获取域名的IP地址

cc++实现获取域名的IP地址c/c++实现获取域名的IP地址// GetHostIP.cpp : 定义控制台应⽤程序的⼊⼝点。

//#include "stdafx.h"#include <winsock2.h>#include <ws2tcpip.h>#include <stdio.h>#include <windows.h>#pragma comment(lib, "ws2_32.lib")int main(int argc, char **argv){//-----------------------------------------// Declare and initialize variables/** WSADATA结构被⽤来储存调⽤AfxSocketInit全局函数返回的Windows Sockets初始化信息。

* 这个结构被⽤来存储被WSAStartup函数调⽤后返回的Windows Sockets数据。

它包含Winsock.dll执⾏的数据。

*/WSADATA wsaData;int iResult;DWORD dwError; /*每个word为2个字节的长度,DWORD 双字即为4个字节,每个字节是8位*/int i = 0;struct hostent *remoteHost; /*域名*/char *host_name; /*主机名*/struct in_addr addr; /*ip*/char **pAlias;// Validate the parametersif (argc != 2) {printf("usage: GetHostIP hostname\n");return 1;}// 此处应添加的程序如下// 1. 当初始化winsocketiResult = WSAStartup(MAKEWORD(2,2),&wsaData);/* & 取地址*/// 2. 检查该socket是否初始化成功,即该socket是否等于0;如果初始化不成功,应当给出错误报警,并结束程序。

C语言获取Linux系统的IP地址和MAC地址

C语言获取Linux系统的IP地址和MAC地址

实际环境和特殊需求往往会将简单问题复杂化,比如计算机IP地址,对于一个连接中socket,可以直接获得本端和对端的IP、端口信息。

但在一些特殊场合我们可能需要更多的信息,比如系统中有几块网卡,他们的Mac地址是多少,每块网卡分配了几个IP(一个网卡对应多个IP)等等。

这些信息往往需要通过ifconfig指令来获得,对于程序员来说,在代码中调用外部的shell 指令可不是个最佳方案,因为没人能保障不同平台、不同版本的ifconfig指令输出的格式是一致的。

本篇文章中将介绍通过ioctl函数实现上述需求。

#includeint ioctl(int fd, int request, … );返回:成功返回0,失败返回-1ioctl函数的参数只有3个,但却是Unix中少有的几个“家族类”复杂函数,这里摘录一段《Unix网络编程》一书中对ioctl函数的描述:在传统上ioctl函数是用于那些普遍使用、但不适合归入其他类别的任何特殊的系统接口……网络程序(一般是服务器程序)中ioctl常用于在程序启动时获得主机上所有接口的信息:接口的地址、接口是否支持广播、是否支持多播,等等。

ioctl函数的第一个参数fd,可以表示一个打开的文件(文件句柄)或网络套接字,第二个和第三个参数体现了函数的家族特色,参数二request根据函数功能分类定义了多组宏,而参数三总是一个指针,指针的类型依赖于参数二request。

因为ioctl的种类实在太多,这里只列出和本文相关的几个参数定义:分类参数二(宏)参数三描述接口SIOCGIFCONF struct ifconf 获得所有接口列表SIOCGIFADDR struct ifreq 获得接口地址SIOCGIFFLAGS struct ifreq 获得接口标志SIOCGIFBRDADDR struct ifreq 获得广播地址SIOCGIFNETMASK struct ifreq 获得子网掩码上表中列出了两个相关的结构体:struct ifconf 和struct ifreq,要了解ioctl函数的具体运用,首先要了解这两个结构:struct ifconf{int ifc_len;union{__caddr_t ifcu_buf;struct ifreq *ifcu_req;} ifc_ifcu;};struct ifreq{# define IFHWADDRLEN 6# define IFNAMSIZ IF_NAMESIZEunion{char ifrn_name[IFNAMSIZ];} ifr_ifrn;union{struct sockaddr ifru_addr;struct sockaddr ifru_dstaddr;struct sockaddr ifru_broadaddr;struct sockaddr ifru_netmask;struct sockaddr ifru_hwaddr;short int ifru_flags;int ifru_ivalue;int ifru_mtu;struct ifmap ifru_map;char ifru_slave[IFNAMSIZ];char ifru_newname[IFNAMSIZ];__caddr_t ifru_data;} ifr_ifru;};struct ifconf的第二个元素ifc_ifcu是一个联合,是指向struct ifreq结构的地址,通常是一组struct ifreq结构空间(每一个描述一个接口),struct ifconf的第一个元素ifc_len描述了struct ifreq结构空间的大小;结构struct ifreq也有两个元素,第一个元素ifr_ifrn内含一个字符串,用来描述接口的名称,比如“eth0″、”wlan0”等,第二个元素是联合,比较复杂,用来描述套接口的地址结构。

C#获取计算机名跟IP地址

C#获取计算机名跟IP地址
//设定标签的大小
label1.TabIndex = 0 ;
label2.TabIndex = 1 ;
label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ;
label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ;
// 建立标签并且初始化
bel1 = new bel ( ) ;
bel2 = new bel ( ) ;
//先继承一个Label 类
label1.Location = new System.Drawing.Point ( 24 , 16 ) ;
private static string getIPAddress ( )
{
.IPAddress addr;
// 获得本机局域网IP地址
addr = new .IPAddress ( Dns.GetHostByName ( Dns.GetHostName ( ) ) .AddressList [0].Address ) ;
C#获取计算机名跟IP地址.txt每个女孩都曾是无泪的天使,当遇到自己喜欢的男孩时,便会流泪一一,于是坠落凡间变为女孩,所以,男孩一定不要辜负女孩,因为女孩为你放弃整个天堂。朋友,别哭,今夜我如昙花绽放在最美的瞬间凋谢,你的泪水也无法挽回我的枯萎~~~程序设计的主要思路及实现方法:
(1).读取计算机的名称:
// 设定标签的对齐方式
this.Text = "获得主机名称和IP地址!" ;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent ;

VC获取IP地址和MAC地址程序

VC获取IP地址和MAC地址程序
#include <winsock2.h> //该头文件定义了Socket编程的功能
#include <stdio.h> //该头文件声明了输入输出流函数
#include <stdlib.h> //该头文件定义了一些通用函数
#include <httpext.h> //该头文件支持HTTP请求
#include <windef.h> //该头文件定义了Windows的所有数据基本型态
#include <Nb30.h> //该头文件声明了netbios的所有的函数
#pragma comment(lib,"ws2_32.lib") //连接ws2_32.lib库.只要程序中用到Winsock API 函数,都要用到 Ws2_32.lib
ncb.ncb_command = NCBASTAT; //对网卡发送NCBSTAT命令,获取网卡信息
ncb.ncb_lana_num = lana_na[0]; //指定网卡号,这里仅仅指定第一块网卡,通常为有线网卡
strcpy((char*)ncb.ncb_callname, "*"); //远程系统名赋值为*
}
}
WSACleanup( ); //卸载Winsock库,并释放所有资源
}
}
//通过WindowsNT/Win2000中内置的NetApi32.DLL的功能来实现的。首先通过发送NCBENUM命令,获取网卡的
ncb.ncb_buffer = (unsigned char *)&Adapter; //指定返回的信息存放的变量
ncb.ncb_length = sizeof(Adapter);

vC++ 获取cpu信息,硬盘ID,网卡MAC地址_内部资料

vC++ 获取cpu信息,硬盘ID,网卡MAC地址_内部资料

目录摘要 (I)获取系统信息程序的开发1.设计目的 (1)2. 设计基本要求 (1)3. 设计内容 (1)4. 设计步骤 (1)5. 程序代码5.1头文件SysinfoView.h (5)5.2头文件Registry.h (6)5.3源文件SysinfoView.cpp (7)5.4源文件MainFrm.cpp (21)5.5源文件Registry.cpp (23)5.6源文件Sysinfo.cpp (26)6.设计成果 (26)总结 (27)参考文献 (28)摘要计算机系统信息包括硬件系统信息和软件系统信息。

硬件系统直接决定了软件系统运行的可行性,同时软件系统又反过来影响着硬件系统的运行。

因此,及时掌握计算机系统信息对于计算机用户来说尤其重要。

本课程设计介绍了如何利用Visual C++这一编程工具进行程序设计来获取计算机的系统信息。

关键词:Visual C++;计算机系统信息;程序设计获取系统信息程序的开发1.设计目的在学习了“VC++程序设计基础”课程的基础上,通过本编程设计练习,旨在加深对相关知识的理解,初步掌握VC++程序设计的基本设计方法,提高程序设计的基本技能及分析、解决编程问题的能力。

2. 设计基本要求计算机系统信息包括硬件系统信息和软件系统信息。

硬件系统直接决定了软件系统运行的可行性,同时软件系统又反过来影响着硬件系统的运行。

因此,及时掌握计算机系统信息对于计算机用户来说尤其重要。

本程序的主要功能如下:1)获取操作系统信息,显示该操作系统的版本号。

2)获取CPU运行速度3)获取内存大小,计算剩余内存大小和百分率4)获取网卡地址和本机机器的IP地址5)操作系统的操作(关闭系统、重启系统、快速重启系统)6)注册表的操作7)程序界面的鼠标拖动操作8)弹出菜单的应用3. 设计内容1)计算机安装操作系统后,操作系统将版本信息存放于注册表的特定位置:HKEY_LOCAL_MACHINE->”Software\\Microsoft\\Windows\\CurrentVersion\\Run\\”.因此只需要进行注册表的访问操作就可以得到相关的操作。

如何通过C获取IP地址及默认网关

示例程序:‎us‎i ng S‎y stem‎.Net;‎usi‎n g Sy‎s tem;‎usi‎n g Sy‎s tem.‎M anag‎e ment‎;us‎i ng S‎y stem‎.Runt‎i me.I‎n tero‎p Serv‎i ces;‎pu‎b lic ‎c lass‎getI‎P{ ‎[D‎l lImp‎o rt("‎I phlp‎a pi.d‎l l")]‎p‎r ivat‎e sta‎t ic e‎x tern‎int ‎S endA‎R P(In‎t32 d‎e st,I‎n t32 ‎h ost,‎r ef I‎n t64 ‎m ac,r‎e f In‎t32 l‎e ngth‎); ‎[Dll‎I mpor‎t("Ws‎2_32.‎d ll")‎]‎p riva‎t e st‎a tic ‎e xter‎n Int‎32 in‎e t_ad‎d r(st‎r ing ‎i p); ‎/‎/获取本机‎的IP‎ pub‎l ic s‎t ring‎getL‎o calI‎P()‎ {‎ st‎r ing ‎s trHo‎s tNam‎e = D‎n s.Ge‎t Host‎N ame(‎); /‎/得到本机‎的主机名‎I‎P Host‎E ntry‎ipEn‎t ry =‎Dns.‎G etHo‎s tByN‎a me(s‎t rHos‎t Name‎); //‎取得本机I‎P‎stri‎n g st‎r Addr‎= ip‎E ntry‎.Addr‎e ssLi‎s t[0]‎.ToSt‎r ing(‎);‎ ret‎u rn(s‎t rAdd‎r);‎ }‎ //获‎取本机的M‎A C‎publ‎i c st‎r ing ‎g etLo‎c alMa‎c()‎ {‎ st‎r ing ‎m ac =‎null‎;‎Mana‎g emen‎t Obje‎c tSea‎r cher‎quer‎y =ne‎w Man‎a geme‎n tObj‎e ctSe‎a rche‎r("SE‎L ECT ‎* FRO‎M Win‎32_Ne‎t work‎A dapt‎e rCon‎f igur‎a tion‎") ; ‎M‎a nage‎m entO‎b ject‎C olle‎c tion‎quer‎y Coll‎e ctio‎n = q‎u ery.‎G et()‎;‎fore‎a ch( ‎M anag‎e ment‎O bjec‎t mo ‎i n qu‎e ryCo‎l lect‎i on )‎‎{‎ i‎f(mo[‎"IPEn‎a bled‎"].To‎S trin‎g() =‎= "Tr‎u e") ‎‎ m‎a c = ‎m o["M‎a cAdd‎r ess"‎].ToS‎t ring‎();‎ } ‎r‎e turn‎(mac)‎;‎}‎//获取‎远程主机I‎P‎p ubli‎c str‎i ng[]‎getR‎e mote‎I P(st‎r ing ‎R emot‎e Host‎N ame)‎{‎‎I PHos‎t Entr‎y ipE‎n try ‎= Dns‎.GetH‎o stBy‎N ame(‎R emot‎e Host‎N ame)‎;‎IPAd‎d ress‎[] Ip‎A ddr ‎= ipE‎n try.‎A ddre‎s sLis‎t;‎ str‎i ng[]‎strA‎d dr =‎new ‎s trin‎g[IpA‎d dr.L‎e ngth‎];‎ for‎(int‎i=0;‎i {‎‎strA‎d dr[i‎] = I‎p Addr‎[i].T‎o Stri‎n g();‎‎}‎retu‎r n(st‎r Addr‎);‎}‎//获取‎远程主机M‎A C‎publ‎i c st‎r ing ‎g etRe‎m oteM‎a c(st‎r ing ‎l ocal‎I P, s‎t ring‎remo‎t eIP)‎{‎‎I nt32‎ldes‎t= in‎e t_ad‎d r(re‎m oteI‎P); /‎/目的ip‎‎I nt32‎lhos‎t= in‎e t_ad‎d r(lo‎c alIP‎); //‎本地ip ‎‎ tr‎y‎{‎ In‎t64 m‎a cinf‎o = n‎e w In‎t64()‎;‎ Int‎32 le‎n = 6‎;‎ int‎res ‎= Sen‎d ARP(‎l dest‎,0, r‎e f ma‎c info‎, ref‎len)‎;‎ ret‎u rn C‎o nver‎t.ToS‎t ring‎(maci‎n fo,1‎6);‎ } ‎c‎a tch(‎E xcep‎t ion ‎e rr) ‎{‎‎Cons‎o le.W‎r iteL‎i ne("‎E rror‎:{0}"‎,err.‎M essa‎g e); ‎}‎‎r etur‎n 0.T‎o Stri‎n g();‎}‎‎‎ pub‎l ic s‎t atic‎void‎Main‎(stri‎n g[] ‎a rgs)‎{‎‎g etIP‎gi =‎new ‎g etIP‎();‎ Co‎n sole‎.Writ‎e Line‎("本地网‎卡信息:"‎);‎ Con‎s ole.‎W rite‎L ine(‎g i.ge‎t Loca‎l IP()‎+ " ‎- " +‎gi.g‎e tLoc‎a lMac‎()); ‎‎ Co‎n sole‎.Writ‎e Line‎("&#9‎2;n&#‎92;r远‎程网卡信息‎:"); ‎s‎t ring‎[] te‎m p = ‎g i.ge‎t Remo‎t eIP(‎"scmo‎b ile-‎t j2")‎;‎for(‎i nt i‎=0;i ‎ {‎‎ C‎o nsol‎e.Wri‎t eLin‎e(tem‎p[i])‎;‎}‎ Con‎s ole.‎W rite‎L ine(‎g i.ge‎t Remo‎t eMac‎("192‎.168.‎0.3",‎"192.‎168.0‎.1"))‎;‎}} ‎‎。

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

VC++之网络通信技术之获取局域网其它计算机的IP地址2010年11月22日星期一 21:59一、创建对话框应用程序二、编辑对话框资源控件ID及标题IDC_LIST_IPIDC_GETOTHERIP获取局域网其它计算机的IP地址(属性有“浮动”)三、添加变量、函数1、添加变量2、添加消息响应函数四、添加代码1、于“GetOtherIPDlg.cpp”文件内添加包含语句#include "stdafx.h"#include "GetOtherIP.h"#include "GetOtherIPDlg.h"#include <Winsock2.h>2、于“GetOtherIPDlg.cpp”文件内添加消息响应函数代码void CGetOtherIPDlg::OnGetotherip(){// TODO: Add your control notification handler code herestruct 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; // 211int b = ptr->S_un.S_un_b.s_b2; // 40int c = ptr->S_un.S_un_b.s_b3; // 35int d = ptr->S_un.S_un_b.s_b4; // 76strTemp.Format(" 计算机%d名称:%s-->IP地址:%d.%d.%d.%d\r\n", i,strFullName,a,b,c,d);m_ListIP.AddString(strTemp);}}} //for 循环结束delete Buffer;WNetCloseEnum( hEnum );} //第一层 if 结束WSACleanup(); //调用WSACleanup函数进行WinSock的清理工作,以便释放其占用的资源}五、添加对象/库模块点“工程”,点“设置”,点选“连接”,添加“MPR.LIB ws2_32.lib.”模块。

VC++获得局域网中计算机的ip

{
m_grid.InsertItem(j,0);
CString sName=nRes2->lpRemoteName;
sName=sName.Right(sName.GetLength()-2);
m_grid.SetItemText(j,0,sName);
CString str="";
struct hostent * pHost;
(3)WnetCloseEnum函数
WnetCloseEnum函数用于结束一次枚举操作。
语法:
DWORD WnetCloseEnum( HANDLE hEnum );
hEnum:由WnetOpenEnum函数的参数lphEnum传入。
(4)gethostbyname函数
gethostbyname函数能够通过计算机的名称返回其网络信息,这个信息中包括IP地址。
(1)WnetOpenEnum函数
WnetOpenEnum函数用于启动对网络资源进行枚举的过程。
语法:
DWORD WnetOpenEnum( DWORD dwScope,DWORD dwType,DWORD dwUsage,
LPNETRESOURCE lpNetResource,LPHANDLE lphEnum );
nRes=(NETRESOURCE*)Buf;
for(DWORD n=0;n<Count;n++,nRes++)
{
DWORD Count1=0xFFFFFFFF;
Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,nRes,&lphEnum);

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

VC++之网络通信技术之获取局域网其他计算机的IP 地址2021 年 11 月 22 日星期一 21:59一、创立对话框应用程序二、编写对话框资源控件 ID 及标题IDC_LIST_IPIDC_GETOTHERIP获取局域网其他计算机的IP 地址 ( 属性有“浮动〞)三、增加变量、函数1、增加变量2、增加信息响应函数四、增加代码1 、于“ GetOtherIPDlg.cpp 〞文件内增加包含语句#include "stdafx.h"#include "GetOtherIP.h"#include "GetOtherIPDlg.h"#include <Winsock2.h>2 、于“ GetOtherIPDlg.cpp 〞文件内增加信息响应函数代码void CGetOtherIPDlg::OnGetotherip(){//TODO: Add your control notification handler codehere 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; // 211int b = ptr->S_un.S_un_b.s_b2; // 40int c = ptr->S_un.S_un_b.s_b3; // 35int d = ptr->S_un.S_un_b.s_b4; // 76strTemp.Format("计算机 %d名称: %s-->IP 地址: %d.%d.%d.%d\r\n", i,strFullName,a,b,c,d);m_ListIP.AddString(strTemp);}}} //for循环结束delete Buffer;WNetCloseEnum( hEnum );} // 第一层 if 结束WSACleanup(); //调用WSACleanup函数进行WinSock的清理工作,以便释放其占用的资源}五、增加对象 / 库模块点“工程〞,点“设置〞,点选“连接〞,增加“ MPR.LIB ws2_32.lib. 〞模块。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档