大家好,偶初学网络编程,家里是adsl上网,动态IP,如何能够在程序取得这个IP?谢谢

解决方案 »

  1.   

    取得本机IP    
      function LocalIP:string; 
    typeTaPInAddr = array [0..10] of PInAddr;PaPInAddr = ^TaPInAddr;varphe : PHostEnt;pptr : PaPInAddr;Buffer : array [0..63] of char;I : Integer;GInitData : TWSADATA;beginWSAStartup($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 beginresult:=StrPas(inet_ntoa(pptr^[I]^));Inc(I);end;WSACleanup;end;========================================program get_ip;useswinsock,sysutils;VARch : ARRAY[1..32] OF Char;i : Integer;WSData: TWSAData;MyHost: PHostEnt;beginIF WSAstartup(2,wsdata)<>0 THENBEGINWriteln('can''t start Winsock: Error ',WSAGetLastError);Halt(2);END;tryIF getHostName(@ch[1],32)<>0 THENBEGINWriteln('getHostName failed');Halt(3);END;exceptWriteln('getHostName failed');halt(3);end;MyHost:=GetHostByName(@ch[1]);IF MyHost=NIL THENBEGINWriteln(GetHostName('+StrPas(@ch[1])+') failed : Error'+IntToStr(WSAGetLastError));Halt(4);ENDELSEBEGINWrite('address ');FOR i:=1 TO 4 DOBEGINWrite(Ord(MyHost.h_addr^[i-1]));IF i<4 THENthen write('.')ELSEwriteln;END;END;end.=========================================== 
    也是在网上查的
      

  2.   

    function GetIP:string;
    //此函数实际是获取最后一个IP地址的字符串,一般是拨号后动态分配的IP地址。
    //如果,主机还未拨号上网,则返回的是本地局域网的IP地址
    var
    WSAData:TWSAData;
    HostName:array[0..MAX_COMPUTERNAME_LENGTH] of Char;
    HostEnt:PHostEnt;
    LastIP:PInAddr; 
    IPList:^PInAddr; 
    begin 
    result:=''''; 
    if 0=WSAStartup(MAKEWORD(1,1), WSAData) then 
    try 
    if 0=gethostname(HostName, MAX_COMPUTERNAME_LENGTH+1) then 
    begin 
    HostEnt:=gethostbyname(HostName);
    if HostEnt<>nil then 
    begin 
    IPList:=Pointer(HostEnt^.h_addr_list); 
    repeat 
    LastIP:=IPList^; 
    INC(IPList); 
    until IPList^=nil;
    if LastIP<>nil then 
    result:=inet_ntoa(LastIP^); 
    end; 
    end; 
    finally 
    WSACleanup; 
    end; 
    end;procedure TFrmmain.IP2Click(Sender: TObject);
    begin
    showmessage(''ip地址为: ''+getip);
    end;
      

  3.   

    http://expert.csdn.net/Expert/topic/1656/1656068.xml?temp=.3662836
    上都有
      

  4.   

    fastnet页的nmdaytime
    的localip属性就可以了
      

  5.   

    gethostname 和 gethostbyname 两个函数配合即可.
      

  6.   

    好像没有这么复杂,(说的不对请原谅)
    只要加入TIdIPWatch控件,然后调用IdIPW.LocalIP就可以得到IP地址了
      

  7.   

    GetHostByName,足以,来晚了,溜缝吧
      

  8.   

    function TFrmChat.GetHostName: String;
    var
      Buf: Array[0..255] of char;
      GInitData: TWSADATA;
      wVerReq: Word;
    begin
      wVerReq := MakeWord(2, 0);
      WSAStartup(wVerReq, GInitData);
      Result := '';
      GetHostName(Buf, Sizeof(Buf));
      Result := StrPas(Buf);
      WSACleanup;
    end;procedure TFrmChat.Button2Click(Sender: TObject);
    begin
      showmessage(HostName);
      showmessage(LocalIP);
    end;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;