社区
网络及通讯开发
帖子详情
如何获得局域网内的所有的计算机名,在不知道IP,域等等的情怳下?解决后高分奉送!
yhxc
2002-12-17 11:01:40
局域网是以工作组来分的,没有用域,要能在任何一个局域网中通用才行。假设计算机都是连接的
...全文
430
17
打赏
收藏
如何获得局域网内的所有的计算机名,在不知道IP,域等等的情怳下?解决后高分奉送!
局域网是以工作组来分的,没有用域,要能在任何一个局域网中通用才行。假设计算机都是连接的
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yhxc
2003-01-07
打赏
举报
回复
结贴了,:)
warton
2002-12-25
打赏
举报
回复
to NowCan
你给我的,我收到,谢谢!!
warton
2002-12-25
打赏
举报
回复
转木头兄的:局域网的域名和域用户计算机的函数,:)
typedef struct
{
unsigned dwScope;
unsigned dwType;
unsigned dwDisplayType;
unsigned dwUsage;
String LocalName;
String RemoteName;
String Comment;
String Provider;
}TDomain;
void check(DWORD res)
{
if (res)
throw Exception(SysErrorMessage(res));
}
void GetDomain(TStrings *List)
{
TList *DomainList = new TList;
List->BeginUpdate();
try
{
List->Clear();
unsigned long bufsize = 8192;
void *buffer = new BYTE[bufsize];
try
{
HANDLE lphEnum = NULL;
check(WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, NULL, &lphEnum));
unsigned long Count = 0xFFFFFFFF;
int res = WNetEnumResource(lphEnum, &Count, buffer, &bufsize);
if (ERROR_NO_MORE_ITEMS == res) return;
check(res);
TNetResource *p = (TNetResource*)buffer;
for (unsigned i = 0; i < Count; ++i)
{
TDomain *domain = (TDomain*)new BYTE[sizeof(TDomain)];
domain->dwScope = p->dwScope;
domain->dwType = p->dwType;
domain->dwDisplayType = p->dwDisplayType;
domain->dwUsage = p->dwUsage;
domain->LocalName = p->lpLocalName;
domain->RemoteName = p->lpRemoteName;
domain->Comment = p->lpComment;
domain->Provider = p->lpProvider;
DomainList->Add(domain);
++p;
}
check(WNetCloseEnum(lphEnum));
for (int i = 0; i < DomainList->Count; ++i)
{
TNetResource *p = (TNetResource*)DomainList->Items[i];
check(WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, p, &lphEnum));
for(;;)
{
Count = 0xFFFFFFFF;
res = WNetEnumResource(lphEnum, &Count, buffer, &bufsize);
if (ERROR_NO_MORE_ITEMS == res) break;
check(res);
TNetResource *Resource = (TNetResource*)buffer;
for (unsigned j = 0; j < Count; ++j)
{
List->Add(Resource->lpRemoteName);
++Resource;
}
}
check(WNetCloseEnum(lphEnum));
}
}
__finally
{
free(buffer);
}
}
__finally
{
List->EndUpdate();
for (int i = 0; i < DomainList->Count; ++i)
free(DomainList->Items[i]);
delete DomainList;
}
}
void GetDomainUser(const String domain, TStrings *List)
{
List->BeginUpdate();
try
{
List->Clear();
unsigned long bufsize = 8192;
void *buffer = new BYTE[bufsize];
try
{
HANDLE lphEnum;
TNetResource Resource;
memset(&Resource, 0, sizeof(Resource));
Resource.lpRemoteName = domain.c_str();
Resource.dwDisplayType = RESOURCEDISPLAYTYPE_SERVER;
Resource.dwUsage = RESOURCEUSAGE_CONTAINER;
Resource.dwScope = RESOURCETYPE_DISK;
check(WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, &Resource, &lphEnum));
for (;;)
{
unsigned long Count = 0xFFFFFFFF;
int res = WNetEnumResource(lphEnum, &Count, buffer, &bufsize);
if (ERROR_NO_MORE_ITEMS == res) return;
check(res);
TNetResource *p = (TNetResource*)buffer;
for (unsigned i = 0; i < Count; ++i)
{
List->Add(p->lpRemoteName + 2);
++p;
}
}
check(WNetCloseEnum(lphEnum));
}
__finally
{
delete []buffer;
}
}
__finally
{
List->EndUpdate();
}
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
GetDomain(ListBox1->Items);
}
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
String domain = ListBox1->Items->Strings[ListBox1->ItemIndex];
GetDomainUser(domain, ListBox2->Items);
}
gudufeixiang
2002-12-24
打赏
举报
回复
m
yuyulily
2002-12-24
打赏
举报
回复
我试了一下invalid老大的代码,不慢啊。
warton
2002-12-24
打赏
举报
回复
nowcan兄,给我一份吧!!
warton
2002-12-24
打赏
举报
回复
不错不错,收藏!!
NowCan
2002-12-24
打赏
举报
回复
我有一份源代码,速度还可以,但是我看不太懂,是VC的。你要的话。给我发邮件注明需要《网上邻居代码》
nowcan@163.com
nowcan@21cn.com
这两个地址都发吧。
yhxc
2002-12-24
打赏
举报
回复
怎么发UDP呀,这个你实现了吗?请速回,我要结贴了!
Lonemoon
2002-12-24
打赏
举报
回复
留着以后看
NowCan
2002-12-24
打赏
举报
回复
那段代码对于每个工作组都有主机的网络是很快,但是遇到我们这里的情况就会在那些空的工作组的地方等待很久。(不知道怎么回事,我们这里经常出现空的工作组。)
smilingchen
2002-12-24
打赏
举报
回复
mark
invalid
2002-12-17
打赏
举报
回复
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <System.hpp>
#include <classes.hpp>
#include <winnetwk.h>
#include <winsock.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//获取网上邻居的列表,存储在串表中
bool EnumNetResource(TStrings *rcList,LPNETRESOURCE lpNR, DWORD dwScope,DWORD dwType)
{
HANDLE hEnum = 0;
DWORD dwResult = WNetOpenEnum(
dwScope, // scope of enumeration
dwType, // resource types to list
0, // enumerate all resources
lpNR, // pointer to resource structure (NULL at first time)
& hEnum // handle to resource
) ;
if( dwResult != NO_ERROR ) return false;
bool bRet=true;
DWORD dwEntries = 0xFFFFFFFF ; // enumerate all possible entries
NETRESOURCE NR[1024];
DWORD dwBuffer=1024*sizeof(NETRESOURCE);
while(1)
{
dwResult = WNetEnumResource( hEnum, // resource-handle
&dwEntries,
(LPVOID)NR,
&dwBuffer
);
if (dwResult == ERROR_NO_MORE_ITEMS)
break;
else if(dwResult!=NO_ERROR)
{
bRet=false;
break;
}
for (DWORD i = 0; i < dwEntries; i++)
{
if(NR[i].dwDisplayType==RESOURCEDISPLAYTYPE_SERVER)
{
char *p=NR[i].lpRemoteName;
// while(*p=='\\') p++;
if(*p)
rcList->Add(p);
}
else if((NR[i].dwUsage& RESOURCEUSAGE_CONTAINER)==RESOURCEUSAGE_CONTAINER)
{
bRet=EnumNetResource(rcList,& NR[i],dwScope,dwType);
if(bRet==false)
break;
}
}
if(bRet==false)
break;
}
//End While(1)
WNetCloseEnum(hEnum);
return bRet;
}
//------获取某主机的IP地址,如果主机名为空,则返回本机的名和IP地址---------
AnsiString gethostip(AnsiString & host)
{
WSADATA wsaData;
AnsiString IP;
int pos=0;
char temp[255];
strcpy(temp,host.c_str());
while(temp[pos++]=='\\');
pos--;
WSAStartup(MAKEWORD(2,0),& wsaData);
if (host.IsEmpty())
{
char hostname[128];
if(gethostname(hostname,128)!=0)
return AnsiString("");
host=hostname;
}
try
{
struct hostent *hp=gethostbyname(temp+pos);//host.c_str());
if (hp== NULL)
{
IP="";
}
else
IP=inet_ntoa(*(struct in_addr*)hp->h_addr_list[0]);
}
catch(...)
{
IP="";
}
WSACleanup();
return IP;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListBox1->Clear();
SB->SimpleText = "正在工作...";
Screen->Cursor=crHourGlass;
EnumNetResource(ListBox1->Items,NULL,RESOURCE_GLOBALNET,RESOURCETYPE_ANY);
Screen->Cursor=crDefault;
SB->SimpleText = "";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(ListBox1->ItemIndex==-1)
return;
Screen->Cursor=crHourGlass;
String Host = ListBox1->Items->Strings[ListBox1->ItemIndex];
AnsiString IP=gethostip(Host);
Screen->Cursor=crDefault;
Edit1->Text=IP;
if(IP.IsEmpty())
MessageBox(Handle,"无法与主机联系!","提示",MB_ICONINFORMATION|MB_OK|MB_SETFOREGROUND);
}
NowCan
2002-12-17
打赏
举报
回复
不好意思,没看清。
慢,看来是不好办了。
可以向137端口发一个广播UDP,看看回应。
NowCan
2002-12-17
打赏
举报
回复
主要是慢在了解析IP上。如果没有必要不要加这个功能。
另,我主页上刚刚放了一个程序,你帮我试试看,我还没有试过呢。
http://nowcan.yeah.net
invalid
2002-12-17
打赏
举报
回复
我运行成功了,慢要采用别的方式。问问nowcan吧。
yhxc
2002-12-17
打赏
举报
回复
非常感谢,但特慢,没运行成功!能怎么让它快点吗?
异地
局
域
网
(虚拟
局
域
网
)纯软件组网方法
课程简介 详细讲解通过软件实现异地组建
局
域
网
(虚拟
局
域
网
),大幅减少硬件成本。 应用场景: 1、企业级ERP 2、在家远程访问办公室电脑 3、远程打印 需要一台有公网
IP
的服务器,如果没有,可以根据实际需求购买不同...
局
域
网
内
计算机
名查
IP
局
域
网
内通过
计算机
名查
ip
和通过
ip
地址查
计算机
名。
用
计算机
名访问
计算机
,
解决
局
域
网
用\\
计算机
名不能访问,用\\
ip
地址可访问
小编为大家介绍下
局
域
网
用\\
计算机
名不能访问,用\\
ip
地址可以访问
解决
办法。...这也就是
局
域
网
内
局
域
网
用\\
计算机
名不能访问,用\\
ip
地址可以访问的问题,现把
解决
方法给大家分享下:1、确定要访问的对象没有防火...
为什么用
计算机
名访问不了,
局
域
网
用
计算机
名不能访问,用
ip
地址可以访问
解决
办...
昨天电脑把系统补丁升级了下,今天开机就无法访问
域
控制器了。经检查发现:用
域
控制器名无法访问,再...这也就是
局
域
网
内
局
域
网
用
计算机
名不能访问,用
ip
地址可以访问的问题,现把
解决
方法给大家分享下:1、确定要访...
用
计算机
名能访问 用
ip
不能访问,
局
域
网
用\\
计算机
名不能访问,用\\
ip
地址可以访问
解决
办...
昨天电脑把系统补丁升级了下,今天开机就无法访问
域
控制器了。...这也就是
局
域
网
内
局
域
网
用\\
计算机
名不能访问,用\\
ip
地址可以访问的问题,现把
解决
方法给大家分享下:1、确定要访问的对象没有防火墙或者防火...
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章