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

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

Помогите узнать IP чужой машины [D7]


Addon ©   (2004-02-06 22:22:00) 

Мне нужно узнать адрес компьютера, который находится в моей локальной сети. Можно ли это зделать с помощью TClientSocket и TServerSocket и как. А можно ли послать текст компьютеру с определенным именем с помощью этих компонентов. Я читал, что можно послать текст по номеру сокета, но меня это не устраивает


denkop   (2004-02-21 21:50:00) [1]

Стори сюда:

function TForm1.FillNetLevel(xxx: PNetResource; List1,List2:TStrings): Word;
Type
   PNRArr = ^TNRArr;
   TNRArr = array[0..59] of TNetResource;
Var
  x: PNRArr;
  tnr: TNetResource;
  I : integer;
  EntrReq,
  SizeReq,
  twx: THandle;
  UserName, Ip,WSName: string;
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;
                      UserName:=copy(WSName,3,length(WSName)-2);
                      HostToIp(UserName,IP);
                      list1.Add(UserName);
                      list2.Add(IP);
                   end;
                   else FillNetLevel(@tnr, list1, list2);
                  end;
                 end;
           end;
           Dispose(x);
           WNetCloseEnum(twx);
    end;
end;

function TForm1.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;

FillNetLevel(nil,ListBox1.Items,ListBox2.Items)
В List1 получаешь имена всех компов в сети в List2 их ip соотв-но


Kotka   (2004-02-06 23:56:00) [2]

>можно ли послать текст компьютеру с определенным именем
да, но не факт, что будет работать

самое лучшее решение - посылать широковещательные пакеты по сети
(недавно здесь была ветка про это)


Наверх

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