在整个局域网中(涉及到不同的域或工作组),若知道了一台计算机的IP地址,如何得到它的计算机名。在DELPHI中如何用代码实现。
请各位指点!!!

解决方案 »

  1.   

    function IPAddrToName(IPAddr : String): String;
      var
        SockAddrIn: TSockAddrIn;
        HostEnt: PHostEnt;
        WSAData: TWSAData;
      begin
        WSAStartup($101, WSAData);
        SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr));
        HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
        if HostEnt<>nil then
        begin
          result:=StrPas(Hostent^.h_name)
        end
        else
        begin
          result:='';
        end;
      end;
      

  2.   

    给你贴一篇:我用以下方法可以得到某一工作组内的所有主机或某一主机内的所有共享文件夹名
    procedure TSearchFileThread.Execute;//线程
    Var
      EnumHandle                : THandle;
      FileRS                     : TNetResource;
      Buf                       : Array[1..500] of TNetResource;
      BufSize                   : DWord;
      Entries                   : DWord;
      Result                    : Integer;
    begin
      mydir := mydir + #0;//mydir为工作组名时可以得到组内所有主机名
                          //mydir为主机名时可以得到机内所有共享文件夹名
      FillChar(FileRS, SizeOf(FileRS) , 0);
      With FileRS do begin
        dwScope := 2;
        dwType := 3;
        dwDisplayType := 1;
        dwUsage := 2;
        lpRemoteName := @mydir[1];
      end;
      WNetOpenEnum( RESOURCE_GLOBALNET,
                    RESOURCETYPE_ANY,
                    0,
                    @FileRS,
                    EnumHandle );
      Repeat
        Entries := 1;
        BufSize := SizeOf(Buf);
       Result := WNetEnumResource( EnumHandle,Entries,@Buf,BufSize );
       If (Result = NO_ERROR) and (Entries = 1) then 
       begin
          s:= StrPas(Buf[1].lpRemoteName); //得到网上资源名,主机或文件夹
          Synchronize(AddFile); //Form1.ListBox1.Items.Add(s);
        end ; 
      Until (Entries <> 1) or (Result <> NO_ERROR);
      WNetCloseEnum( EnumHandle );
    end;
    如令mydir 为WorkGroup则可得到WorkGroup内所有计算机名
    如令mydir 为\\201 则可得到主机//201内所有共享文件夹名
    现在的问题是 如令mydir 为\\201\share (已知share为\\201内一共享文件夹),则
    ListBox1内没有显示,即得不到 \\201\share 内的共享文件夹名和文件名。
    不知何故,请教各位。这个问题我自己解决了!
    可以用以下方法获得已知共享文件夹中的文件。
        Found := FindFirst(mydir+'\*.*', $0000003F , searchrec);
        while Found = 0 do
        begin
          listBox1.items.Add(searchrec.name);
          Found := FindNext(SearchRec);
        end;
        FindClose(SearchRec);
      

  3.   

    改为FindFirst(mydir+'\*',searchrec)可以得到该文件夹中所有文件。