如何 获取 本机的 Ip 地址 (急,在线等)

来源:互联网  时间:2016/7/14 14:53:41

关于网友提出的“ 如何 获取 本机的 Ip 地址 (急,在线等)”问题疑问,本网通过在网上对“ 如何 获取 本机的 Ip 地址 (急,在线等)”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 如何 获取 本机的 Ip 地址 (急,在线等)
描述:

如何 获取 本机的 Ip 地址 (急,在线等)
用社么 函数?


解决方案1:

uses winsock;
function GetLocalIP(var LocalIp: string): Boolean;
var
    HostEnt: PHostEnt;
    Ip: string;
    addr: pchar;
    Buffer: array [0..63] of char;
    GInitData: TWSADATA;
begin
  Result := False;
  try
    WSAStartup(2, GInitData);
    GetHostName(Buffer, SizeOf(Buffer));
    HostEnt := GetHostByName(buffer);
    if HostEnt = nil then Exit;
    addr := HostEnt^.h_addr_list^;
    ip := Format('%d.%d.%d.%d', [byte(addr [0]),
          byte (addr [1]), byte (addr [2]), byte (addr [3])]);
    LocalIp := Ip;
    Result := True;
  finally
    WSACleanup;
  end;
end;
var
  strIP:string;
begin
  if GetLocalIP(strIP) then
  Caption:=strip;
end;

解决方案2:

简单点的
{* 获取本机的IP地址}
function 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;

解决方案3:

procedure TForm1.Button4Click(Sender: TObject);{查找本机的ip地址}
var
  ch: ARRAY[1..32] OF Char;
  i: Integer;
  WSData: TWSAData;
  MyHost: PHostEnt;
  a, b: string;
begin
  if WSAstartup(2,wsdata)<>0 then
    begin
      Edit1.Text := 'can''t start Winsock: Error ' + IntToStr(WSAGetLastError);
      Halt(2);
    end;
  try
    IF getHostName(@ch[1],32)<>0 then
      begin
        Edit1.Text := 'getHostName failed';
        Halt(3);
      end;
  except
    Edit1.Text := 'getHostName failed';
    halt(3);
  end;
  MyHost:=GetHostByName(@ch[1]);
  if MyHost=NIL then
    begin
      Edit1.text := (' +GetHostName('+StrPas(@ch[1])+'), failed : Error'+IntToStr(WSAGetLastError));
      Halt(4);
    end
  else
    begin
      a := '本机IP地址为  :';
      for i:=1 to 4 do
      begin
        b := intToStr(Ord(MyHost.h_addr^[i-1]));
        if i<4 then
          b := b + '.';
        a := a + b;
      end;
    end;
  Edit1.Text := a;
end;

解决方案4:

//获取本机IP地址
//InternetIP 是否取得InternetIP地址 否则为网卡地址
Function GetLocalIp(InternetIP:boolean):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;
    IP: String;
begin
    Screen.Cursor := crHourGlass;
    try
      WSAStartup($101, GInitData);
      IP:='0.0.0.0';
      GetHostName(Buffer, SizeOf(Buffer));
      phe := GetHostByName(buffer);
      if phe = nil then
      begin
        ShowMessage(IP);
        Result:=IP;
        Exit;
      end;
      pPtr := PaPInAddr(phe^.h_addr_list);
      if InternetIP then
        begin
          I := 0;
          while pPtr^[I] <> nil do
            begin
              IP := inet_ntoa(pptr^[I]^);
              Inc(I);
            end;
        end
      else
        IP := inet_ntoa(pptr^[0]^);
      WSACleanup;
      Result:=IP;//如果上网则为上网ip否则是网卡ip
    finally
      Screen.Cursor := crDefault;
    end;
end;

上一篇急,一个简单的sql语句
下一篇5小弟初学,迷惑5,请高手帮助。
明星图片
相关文章
《 如何 获取 本机的 Ip 地址 (急,在线等)》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)