uses 
  WinSock,SysUtils; 
function TWebMain.getLocalIP : String; 
type 
    TaPInAddr = array [0..10] of PInAddr; 
    PaPInAddr = ^TaPInAddr; 
var 
    phe  : PHostEnt; 
    pptr : PaPInAddr; 
    Buffer : array [0..63] of char; 
    I    : Integer; 
    GInitData      : TWSADATA; 
begin 
    WSAStartup($101, GInitData); 
    Result := ''; 
    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 
      result:=StrPas(inet_ntoa(pptr^[I]^)); 
      Inc(I); 
    end; 
    WSACleanup; 
end;

解决方案 »

  1.   

    uses Winsock;procedure TForm1.Button1Click(Sender: TObject);
    var Ip,IpStr:string;  ch:array[1..32]of char;  i:integer;
        WSData:TWSAData;  MyHost:PHostEnt;
    begin
       if WSAstartup(2,WSData)<>0 then
          begin
             ShowMessage('没有成功返回!');
             Halt(2);
          end;
       try
          if getHostName(@ch[1],32)<>0 then
             begin
                ShowMessage('没有成功返回!');
                Halt(3);
             end;
       except
          ShowMessage('没有成功返回!');
          Halt(3);
       end;
       MyHost:=GetHostByName(@ch[1]);
       if MyHost=NIL then
          begin
             ShowMessage('没有成功返回!');
             Halt(4);
          end
       else
          begin
             for i:=1 to 4 do
                begin
                   Ip:=inttostr(Ord(MyHost.h_addr^[i-1]));
                   ShowMessage('IP分段地址为:'+Ip);
                   IPStr:=IPStr+Ip;
                   if i<4 then IPStr:=IPStr+'.'
                   else  ShowMessage('IP地址为:'+IPStr);
                end;
          end;
    end;
      

  2.   

    function LocalIP:string;
    type
        TaPInAddr = array [0..10] of PInAddr;
        PaPInAddr = ^TaPInAddr;
    var
        phe  : PHostEnt;
        pptr : PaPInAddr;
        Buffer : array [0..63] of char;
        I    : Integer;
        GInitData      : TWSADATA;begin
        WSAStartup($101, GInitData);
        Result := '';
        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
          result:=StrPas(inet_ntoa(pptr^[I]^));
          Inc(I);
        end;
        WSACleanup;
    end;
    ========================================
    program get_ip;
    uses
      winsock,sysutils;
    VAR
      ch : ARRAY[1..32] OF Char;
      i : Integer;
      WSData: TWSAData;
      MyHost: PHostEnt;
    begin
      IF WSAstartup(2,wsdata)<>0 THEN
        BEGIN
          Writeln('can''t start Winsock: Error ',WSAGetLastError);
          Halt(2);
        END;
      try
        IF getHostName(@ch[1],32)<>0 THEN
          BEGIN
            Writeln('getHostName failed');
            Halt(3);
          END;
      except
        Writeln('getHostName failed');
        halt(3);
      end;
      MyHost:=GetHostByName(@ch[1]);
      IF MyHost=NIL THEN
        BEGIN
          Writeln(GetHostName('+StrPas(@ch[1])+') failed : Error
    '+IntToStr(WSAGetLastError));
          Halt(4);
        END
      ELSE
        BEGIN
            Write('address ');
             FOR i:=1 TO 4 DO
                BEGIN
                  Write(Ord(MyHost.h_addr^[i-1]));
                  IF i<4 THEN
    then     write('.')
                  ELSE
                    writeln;
                END;
       END;
    end.
    ===========================================
      

  3.   

    uses IdStack;然后GStack.LocalAddress;就可以得到本机的ip地址了。
    delphi的demos里有一个例子就是这么用的。
      

  4.   

    获取本机IP的简单方法:放一控件FastNet\TNMDayTime(delphi自带的)在form1上
    begin
      showmessage(NMDayTime1.LocalIP);
    end;