请指教,谢谢!

解决方案 »

  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.   

    这是我经常用的:定然正确的了
    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;
      

  3.   

    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. 
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ShellApi,Winsock, StdCtrls;type
      TForm1 = class(TForm)
        Label1: TLabel;
        Edit1: TEdit;
        Label2: TLabel;
        Edit2: TEdit;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }  public
        { Public declarations }
      end;var
      Form1: TForm1;
      FComputerName : String;//用来存贮本机的计算机名称
      FComputerIP : String;  //用来存贮本机的计算机IP地址implementation{$R *.DFM}procedure GetClientPcNameIP; //定义了一个局部函数,这个函数的功能是获取本机的计算机名称和IP
    const
            nSize = 256;
    var
            strName : PChar;
            pWsaData : WSAData;
            nHostent : PHostEnt;
            Ver : Word;
    begin
            try
                    //初始化WinSock
                    Ver := MakeWord(2,0);
                    if WSAStartup(Ver,pWsaData) <> 0 then exit;                //获取本机的计算机名和IP
                    GetMem(strName,nSize);
                    if GetHostName(strName,nSize) <> 0 then exit;
                    FComputerName := strName;
                    nHostent := GetHostByName(strName);
                    //FPcIP := AnsiString(inet_ntoa((pinin_addr((hInfo.h_addr_list)^))^));                FComputerIP := inet_ntoa((PInAddr((nHostent.h_addr_list)^))^);
            finally
                    FreeMem(strName);
            end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
            GetClientPcNameIP;
            Edit1.Text := FComputerName;
            Edit2.Text := FComputerIP;
    end;end.说明:在Form中放两个TEdit控制和两个TLabel控制,包含ShellApi,Winsock两个单元即可。
      

  5.   

    谢谢,可我只有20分,该怎么分好呢
    silverwonder(刷卡太快请重刷) 经过验证是正确得其他人得我也想一定正确的不好意思啊。silverwonder(刷卡太快请重刷) ,这次平均分了,下次我再给你加分