Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

IP всех компов в локальной сети [D6, Win95/98]


kalishenko stas ©   (2002-11-15 20:59:00) 

У меня есть пример получения всех машин в сети, но он почему-то не работает (не пойму почему). Может, потому что сеть одноранговая, и, кроме того, на всех машинах стоит NovellClient, т.е. сеть новеловская. Если причина в этом, то что тогда делать, кто нибудь скажет?


Filat   (2002-11-19 21:41:00) [1]

А для разных сегментов показывает, т.е. типа 10.10.1.35 и 10.10.5.35 покажет?
Я полгода назад что-то похожее делал, так показывал компы только в том сегменте, в котором мой комп, хотя DNS и все остальное настроено, ну шлюзы соответственно тоже....


kalishenko stas   (2002-11-19 14:30:00) [2]

Спасибо огромное, Wonder, все получилось. (Уррррра!)


Wonder   (2002-11-19 14:07:00) [3]

>>Да нет, как раз наоборот, код из FAQ-а не заработал (как только не кручу). Выдает ошибки типа "[Error] Unit1.pas(60): Types of actual and formal var parameters must be identical". Че с ней делать не знаю.

:)))
Ну а в хелп по этой ф-ции глянуть? Да и поглядеть тип параметров?

Замени

var
...
BufSize : Integer;
Entries : Integer;
...

на

var
...
BufSize : Longword;
Entries : Longword;
...

и будет тебе счастье :)))


kalishenko stas   (2002-11-19 13:39:00) [4]

>>Wonder

Да нет, как раз наоборот, код из FAQ-а не заработал (как только не кручу). Выдает ошибки типа "[Error] Unit1.pas(60): Types of actual and formal var parameters must be identical". Че с ней делать не знаю.

"И служба доступа стоит, т.е. все в полном боекомплекте." - а это я о том, что все необходимые компоненты сетевого окружения стоят.


Wonder   (2002-11-19 10:08:00) [5]

Так у тебя код из FAQ-а заработал или где?


kalishenko   (2002-11-19 09:31:00) [6]

И служба доступа стоит, т.е. все в полном боекомплекте.


False_Delirium   (2002-11-19 03:03:00) [7]

Служюа доступа к файлам и принтерам ... если не стоит, то нет биос не видит этот комп...


kalishenko   (2002-11-18 17:48:00) [8]

Сейчас попробую, хотя не пойму в чем разница. Все эти проги (получения списка машин) используют одни и те же функции.


Wonder   (2002-11-18 17:33:00) [9]

http://delphi.mastak.com/cgi-bin/faq.pl?look=1&id=988621104&n=20


kalishenko   (2002-11-18 17:03:00) [10]

>>Wonder

"Клиент для сетей Microsoft" стоит и компы в сетевом окружении видны.


Wonder   (2002-11-18 16:53:00) [11]

Я не спрашивал, что стоит по умолчанию, я спрашивал, стоит ли "Клиент для сетей Microsoft" вообще...

В "Сетевом окружении" имена компьютеров (окромя серверов Нетвари) видны?


kalishenko   (2002-11-18 16:11:00) [12]

>>Wonder

По умолчанию стоит "Novell NetWare Client". Так что, поэтому ничего и не видно?


nickolayLI   (2002-11-18 14:01:00) [13]

Писок всех компов
function TTimeCr.FillNetLevel(xxx: PNetResource; list: TStrings) : Word;
Type
PNRArr = ^TNRArr;
TNRArr = array [0..59] of TNetResource;
Var
x: PNRArr;
tnr: TNetResource;
I : integer;
EntrReq,
SizeReq,
twx: Cardinal;
WSName: string;
begin
Result := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, xxx, twx);
If Result = ERROR_NO_NETWORK Then Exit;
if Result = NO_ERROR then begin
New(x);
EntrReq := 1;
SizeReq := SizeOf(TNetResource)*59;
while (twx <> 0) and(WNetEnumResource(twx, EntrReq, x, SizeReq) <> ERROR_NO_MORE_ITEMS) do begin
for i := 0 To EntrReq - 1 do begin
Move(x^[i], tnr, SizeOf(tnr));
case tnr.dwDisplayType of
RESOURCEDISPLAYTYPE_SERVER: begin
if tnr.lpRemoteName <> "" then
WSName:= tnr.lpRemoteName
else WSName:= tnr.lpComment;
list.Add(Copy(WSName,3,Length(WSName)));
Application.ProcessMessages;
end; else FillNetLevel(@tnr, list);
end;
end;
end;
Dispose(x);
WNetCloseEnum(twx);
end;
end;

айпи по имени
function HostToIP(Name: string; var Ip: string): Boolean;
var
wsdata : TWSAData;
hostName : array [0..255] of char;
hostEnt : PHostEnt;
addr : PChar;
begin
WSAStartup ($0101, wsdata);
try
gethostname (hostName, sizeof (hostName));
StrPCopy(hostName, Name);
hostEnt := gethostbyname (hostName);
if Assigned (hostEnt) then
if Assigned (hostEnt^.h_addr_list) then begin
addr := hostEnt^.h_addr_list^;
if Assigned (addr) then begin
IP := Format ("%d.%d.%d.%d", [byte (addr [0]),
byte (addr [1]), byte (addr [2]), byte (addr [3])]);
Result := True;
end
else
Result := False;
end
else
Result := False
else begin
Result := False;
end;
finally
WSACleanup;
end
end;


Wonder   (2002-11-18 14:00:00) [14]

А "Клиент для сетей Microsoft" стоит?


kalishenko stas   (2002-11-18 11:40:00) [15]

Стоит и tcp/ip, и ipx/spx (по второму работает NetWare).


Sergey V. Shadrin   (2002-11-18 09:50:00) [16]

2 kalishenko stas) а tcp/ip в сети вообще стоит?


kalishenko stas   (2002-11-18 09:18:00) [17]

>>Cypher и другим

Вот исходник:

unit Net;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, Buttons, ImgList, ExtCtrls;

type
TNetForm = class(TForm)
ListView1: TListView;
ImageList1: TImageList;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Button2: TButton;
{ procedure FormShow(Sender: TObject);}
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
Function FillNetLevel(xxx: PNetResource; list: TListItems) : Word;
function GetComputer:String;
end;

var
NetForm: TNetForm;
name_server:integer;
implementation
{uses main,Info,Network_connect;}
{$R *.DFM}

function TNetForm.FillNetLevel(xxx: PNetResource; List:TListItems): Word;
Type
PNRArr = ^TNRArr;
TNRArr = array[0..59] of TNetResource;
Var
x: PNRArr;
tnr: TNetResource;
I : integer;
EntrReq,
SizeReq,
twx: THandle;
WSName: string;
LI:TListItem;
begin

Result :=WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER, xxx, twx);
If Result = ERROR_NO_NETWORK Then Exit;
if Result = NO_ERROR then
begin
New(x);
EntrReq := 1;
SizeReq := SizeOf(TNetResource)*59;
while (twx <> 0) and
(WNetEnumResource(twx, EntrReq, x, SizeReq) <> ERROR_NO_MORE_ITEMS) do
begin
For i := 0 To EntrReq - 1 do
begin
Move(x^[i], tnr, SizeOf(tnr));
case tnr.dwDisplayType of
RESOURCEDISPLAYTYPE_SERVER:
begin
if tnr.lpRemoteName <> "" then
WSName:= tnr.lpRemoteName
else WSName:= tnr.lpComment;
LI:=list.Add;
LI.Caption:=copy(WSName,3,length(WSName)-2);
//list.Add(WSName);


end;
else FillNetLevel(@tnr, list);
end;
end;
end;
//Dispose(x);
//WNetCloseEnum(twx);
end;
end;




function TNetForm.GetComputer: String;
begin
result:="";
if (ShowModal=mrok)and(ListView1.Selected<>nil) then result:=ListView1.Selected.Caption;
end;

procedure TNetForm.BitBtn2Click(Sender: TObject);
begin
ModalResult:=mrcancel;
end;

procedure TNetForm.BitBtn1Click(Sender: TObject);
begin
modalresult:=mrok;
end;



procedure TNetForm.Button1Click(Sender: TObject);
var i:integer;
j:integer;
name,k:string;
begin
try
ListView1.Items.Clear;
FillNetLevel(nil,ListView1.Items);
i:=ListView1.Items.Count;
edit1.Text:=IntToStr(i);
//i:=ListView1.Items.Count;
//edit1.Text:=IntToStr(i);



//i:=0;


button1.Enabled:=false;
except
messagebox(0,"Невозможно выполнить задачу","Внимание",MB_OK);
end;

end;



procedure TNetForm.Button2Click(Sender: TObject);
begin
close;
end;

procedure TNetForm.TimerTimer(Sender: TObject);
begin
if ListView1.Items.Count=0 then close;
end;

procedure TNetForm.FormCreate(Sender: TObject);
begin
button1.Enabled:=true;
end;

end.



cypher   (2002-11-17 01:01:00) [18]

покажи код
все примеры, которые я видел все для работы с одноранговыми сетями...


Наверх

Титульная страница Поиск, карта сайта Написать письмо