不使用socket控件,怎样取得本机的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;
      

  2.   

    不用控件,你可以用函数嘛.
    给你一个示例:
    var
      wsaData: TWSADATA;
      Addr: DWord;
      ip_temp1: array[0..14] of char;
      b: pchar;
    begin
      WSAStartup(MAKEWORD(1,1), wsaData);
      Fillchar(ip_temp1, SizeOf(ip_temp1), 0);
      CopyMemory(@ip_temp1, Pchar(Edit1.Text), length(Edit1.Text));
      b := pchar(inttostr(i));
      strcat(ip_temp1, b);
      Addr := inet_addr(ip_temp1);
      if GetHostByAddr(@addr, SizeOf(addr), PF_INET) <> nil then
        showmessage(string(ip_temp1));
      WSACleanup;
    end;
      

  3.   

    你可以用下面的方法试一试
    主要思想是运行dos下面的ipconfig命令
    var
      temp:string;
    begin
      temp:='c:\temp.txt';
    if fileexists(temp) then
      deletefile(temp);
    winexec(pchar('command.com /c ipconfig>'+temp,sw_hide);
    if not fileexists(temp) then
      sleep(2000);
    memo1.lines.loadfromfile(temp);
    end;
      

  4.   

    这个我一直在用,你试试。
    { 当前计算机IP  DG: 2002-03-23 }
    Function gGetCurrentComputerIP:Pchar;stdcall;
    type
      TaPInAddr = array[0..10] of PInAddr; //需引用WinSock单元
      PaPInAddr = ^TaPInAddr;
    var
      wsaData: TWSAData;
      pheHostEnt: PHostEnt;
      pptr: PaPInAddr;
      I: integer;
      ComputerName : Pchar;
    begin
      //功能注释: 返回的字符串值为当前计算机的IP地址
      Result := '';
      //返回计算机名称
      ComputerName := gGetCurrentComputerName;
      if WSAStartup(MakeWord(2,0),wsaData) <> 0 then
        begin
        WSACleanup;
        Exit;
        end;
      pheHostEnt := GetHostByName(PChar(ComputerName));
      if pheHostEnt = nil then
        begin
        WSACleanup;
        Exit;
        end;
      pPtr := PaPInAddr(pheHostEnt^.h_addr_list);
      I := 0;
      while pPtr^[I] <> nil do
      begin
        Result := inet_ntoa(pptr^[I]^);
        Inc(I);
      end;
      WSACleanup;
    end;
      

  5.   

    取计算机名称:
    { 当前计算机名称 DG: 2002-03-23 }
    Function gGetCurrentComputerName:Pchar;stdcall;
    var
      SPCName:Pchar;
      MaxLen:Cardinal;
    begin
      //功能注释: 返回的字符串值为当前计算机名称
      MaxLen:=MAX_COMPUTERNAME_LENGTH+1;
      GetMem(SPCName,MaxLen);
      GetComputerName(SPCName,MaxLen);
      Result:=SPCName;
    end;