Procedure GetIPAddr(var ts:TStrings);
type
  TAddrList = array[0..9] of PinAddr;
  PAddrList = ^TAddrList;
var
  Phent:PHostEnt;
  p:PAddrList;
  i:integer;
  Buffer:array [0..63] of char;
begin
  GetHostName(Buffer, SizeOf(Buffer));
  Phent:=GetHostByName(Buffer);
  if Phent<>nil then begin
    i:=0;
    p:=PAddrList(Phent^.h_addr_list);
    While P[i]<>nil do begin
      ts.Add(StrPas(inet_ntoa(P[i]^)));
      inc(i);
    end;
  end;
end;以上代码只能得到一个地址,请高手给于解答.

解决方案 »

  1.   

    感觉你的代码没问题啊   While P[i]<>nil do begin
          showMessage(StrPas(inet_ntoa(P[i]^)));
          ts.Add(StrPas(inet_ntoa(P[i]^)));
      

  2.   

    利用Indy的IdIpWatch写了一个,可以用uses IdComponent, IdIPWatch, IdStack, IdBaseComponenttype
      TMyIdIpWatch = class(TIdIpWatch)
      public
        function LocalIPs: TStringList;
      end;{ TMyIdIpWatch }function TMyIdIpWatch.LocalIPs: TStringList;
    begin
      FLocalIpHuntBusy := True;
      try
      Result := TStringList(GStack.LocalAddresses);
      finally
        FLocalIPHuntBusy := False;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      aa: TMyIdIpWatch;
    begin
      aa := TMyIdIpWatch.Create(nil);
      ShowMessage(aa.LocalIPs().Text);
    end;
      

  3.   

    我的两个系统都取不出来IP,郁闷啊1.Windows Server 2003 with SP1 + Delphi 7
    2.Windows XP with SP2 + Delphi 7
      

  4.   

    type
        TaPInAddr = array [0..10] of PInAddr;
        PaPInAddr = ^TaPInAddr;
    var
        phe  : PHostEnt;
        pptr : PaPInAddr;
        Buffer : array [0..63] of char;
        I    : Integer;
        GInitData      : TWSADATA;
    begintry
    try
        WSAStartup($101, GInitData);
        sLocalIp:='';
        GetHostName(Buffer, SizeOf(Buffer));
        phe :=GetHostByName(buffer);
        if phe = nil then Exit;
        pptr := PaPInAddr(Phe^.h_addr_list);
        I := 0;
        while pptr^[I] <> nil do
          begin
           sLocalIp:=StrPas(inet_ntoa(pptr^[I]^));
           Inc(I);
           ListboxIp.Items.Append(sLocalIp);
          end;
    except
    end;      
    finally
        WSACleanup;
    end;