怎样得出本机的IP地址

解决方案 »

  1.   

    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.
    ===========================================
      

  2.   

    Indy Misc面板IdIPWatch组件 设active为true;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      showmessage(IdIPWatch1.LocalIP);
    end;
      

  3.   

    提供一个取得本机IP的函数给你,给我50分!
    function TFrmChat.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(MakeWord(2,0), 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;
      

  4.   

    用IdIPWatch组件,很简单 lable1:=IdIPWatch1.LocalIP; 就可以了!
      

  5.   

    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;
    procedure TForm1.Button4Click(Sender: TObject);
    var
     result:string;
    begin
      result:=localip;
      showmessage('本机ip地址为: '+result);
    end;