社区
网络编程
帖子详情
高分求救!~!~如何编程实现查找局域网内其它主机的IP和主机名????
cxn0808
2003-05-11 11:28:36
吾正在用VC编写一点对点聊天程序,连接时要求输入对方IP,现在我要通过函数调用实现局域网内的其它主机的IP和主机名,但苦于实在找不到相应的函数,希望名位高手能帮小弟一把!~!~!谢谢先了!~!~!
...全文
141
2
打赏
收藏
高分求救!~!~如何编程实现查找局域网内其它主机的IP和主机名????
吾正在用VC编写一点对点聊天程序,连接时要求输入对方IP,现在我要通过函数调用实现局域网内的其它主机的IP和主机名,但苦于实在找不到相应的函数,希望名位高手能帮小弟一把!~!~!谢谢先了!~!~!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
huangbeyond
2003-05-12
打赏
举报
回复
(转贴)
枚举出局域网上所有网络资源
MicroSoft提供了以下几个API:WnetOpenEnum、WnetEnumResource、WNetCloseEnum及一个结构类型NETRESOURCE用于搜索局域网上的网络资源。
其中NETRESOURCE的定义如下:
typedef struct _NETRESOURCE { // nr
DWORD dwScope;
DWORD dwType;
DWORD dwDisplayType;
DWORD dwUsage;
LPTSTR lpLocalName;
LPTSTR lpRemoteName;
LPTSTR lpComment;
LPTSTR lpProvider;
} NETRESOURCE;
我们主要用到是dwType(资源类型:磁盘或打印机)、dwDisplayType(资源类型:服务器,域等)、dwUsage(判断是不是容器c o ntainer)、lpRemoteName(资源名称)。
WnetOpenEnum的作用是打开某一特定的资源容器句柄给WnetEnumResource。WnetEnumResource枚举出指定容器下所有网络资源。
下面是一个列出所有网络资源的的函数示例:
bool __fastcall TForm1::EnumerateFunc(HWND hwnd ,LPNETRESOURCE lpnr,TTreeNode * ParentNode)
{
DWORD dwResult, dwResultEnum;
HANDLE hEnum;
DWORD cbBuffer = 16384; /* 16K is reasonable size */
DWORD cEntries = 0xFFFFFFFF; /* enumerate all possible entries */
LPNETRESOURCE lpnrLocal; /* pointer to enumerated structures */
DWORD i;
dwResult = WNetOpenEnum(RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
0, /* enumerate all resources */
lpnr, /* NULL first time this function is called */
&hEnum); /* handle to resource */
if (dwResult ==67) //domain下没有可访问的主机
return true;
if (dwResult != NO_ERROR ) { //无
ShowError(dwResult);
return false;
}
TTreeNode * Child;
do {
lpnrLocal = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer);
dwResultEnum = WNetEnumResource(hEnum, /* resource handle */
¢ries, /* defined locally as 0xFFFFFFFF */
lpnrLocal, /* LPNETRESOURCE */
&cbBuffer); /* buffer size */
if (dwResultEnum == NO_ERROR) {
for(i = 0; i < cEntries; i++) {
Child=TreeView1->Items->AddChild(ParentNode,lpnrLocal[i].lpRemoteName);
if(RESOURCEUSAGE_c o nTAINER ==
(lpnrLocal[i].dwUsage & RESOURCEUSAGE_c o nTAINER))
if(!EnumerateFunc(this->Handle, &lpnrLocal[i],Child))
ShowMessage("EnumerateFunc returned FALSE.");
}
}
else if (dwResultEnum != ERROR_NO_MORE_ITEMS) {
ShowError(dwResultEnum);
break;
}
}
while(dwResultEnum != ERROR_NO_MORE_ITEMS);
GlobalFree((HGLOBAL) lpnrLocal);
dwResult = WNetCloseEnum(hEnum);
if(dwResult != NO_ERROR) {
ShowError(dwResult);
return FALSE;
}
return true;
}
需要说明在win98下,此方法列出的资源和网络邻居列出的是一样,和网络邻居一样,有时列出的数据并不准确,可能会有一些域或机器不能找到。
resound
2003-05-12
打赏
举报
回复
在SDK中就有啊
WNetOpenEnum (RESOURCE_GLOBALNET,RESOURCETYPE_DISK,0,pNetResource,&hEnum);
WNetEnumResource( hEnum, &Count, Buffer, &BufferSize );
一步一步地调用上面的枚举函数可依次找到网络邻居的主机名,
再根据主机名用gethostbyname(..)得到其IP.
自己动手
实现
netty4
1. 从0开始编写netty4,更详细了解netty的架构思路和编写历程 2. 真正看netty源码无障碍 3. 学习看源码思考方式 4.帮助面试获得
高分
基础
各位兄弟,在SDK
编程
中如果
实现
窗口分割呢?请问怎么得到一个函数的执行时间,单位毫秒!如何调试asp组件呀。用vc++调试编制的组件怎样画一个箭头?
高分
请教如何限制程序运行的方法?求助:通过
编程
DirectX抓屏-----...
数据库帖子收集
高分
求救
!! 更改数据库的排序规则,出现如下问题,大力帮忙吧? 存储过程可以一次删掉多个数据吗? SQL server 安装问题 使用bulk insert将txt文件数据转为sql的时候,顺序发生改变,请问怎么使写入的...
WEB开发文档2 总结
http://blog.donews.com/lvjiyong/archive/2006/06/29/931071.aspx 怎样将后台生成的在内存中的图象显示到客户端 Microsoft IE WebControls下载地址 如何在DATAGRID中使用JAVASCR
IP
T脚本控制 DataGrid...下载中文名
MS-SQL Server 基础类 - SQL语句
请教SQL语句或其它方法:一个含TEXT字段的表,我无意间用了两次BCP重复导入数据,之后表中有... 请问怎样编写SQL语句:在成绩列输入数据,然后对其进行排序,并把结果存入排名列. sqlserver中如何选取查询结果的中间某...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章