当一台机器连上互联网后。会有一个IP地址,(这个IP不是你自已所设的那个),怎么样获得这个IP 地址。(我记得这个IP是你每次开机上网就会分配给你而且每次都不同。)有源程序最好。

解决方案 »

  1.   

    再次提醒::发问题之前请查询以前的帖子.
    方法有多种,给你其中一种吧:
    uses中加入Nb30, ScktComp, Winsock, shlobj
    procedure TForm1.Button3Click(Sender: TObject);
    var
      wsaData: TWSADATA;
      HostName: array[0..79] of char;
      p: PHostEnt;
      addr: array[0..1] of in_addr;
      i: integer;
      cc: ppchar;
      cc2: pchar;
    begin
      if WSAStartup(MAKEWORD(1,1), wsaData) <> 0 then
      begin
        Edit3.Text := 'WinSock版本错误!';
        exit;
      end;
      for i := 0 to 1 do
        fillchar(addr[i], Sizeof(In_addr), 0);
      if gethostname(HostName, 80) = SOCKET_ERROR then
      begin
        edit3.Text := '不能取得本地机器名字!';
        exit;
      end;
      p := GetHostByName(HostName);
      if not assigned(p) then
      begin
        edit3.text := '找不到主机!';
        exit;
      end;
      i := 0;
      cc := p^.h_addr_list;
      CopyMemory(@addr[0], cc, SizeOf(in_addr));
      for i := 0 to SizeOf(in_addr) - 1 do
        cc2[i] := cc^[i + SizeOf(in_addr)];
      CopyMemory(@addr[1], cc2, SizeOf(in_addr));
    {  for i := 0 to 1 do
      begin
        CopyMemory(@addr[i], cc2, SizeOf(in_addr));
        cc2 := PChar(
        inc(i, 1);
      end;}
      if string(inet_ntoa(addr[1])) = '0.0.0.0' then
        edit3.Text := '计算机没有连接到互联网!'
      else
        edit3.Text := '互联网络IP地址是:'+string(inet_ntoa(addr[0]));
      WSACleanup();
    end;
      

  2.   

    cc := p^.h_addr_list;
    [Error] Unit1.pas(83): Incompatible types: 'WinSock.PChar' and 'System.PChar'
      

  3.   

    to:menliwxy(有缘):谢谢我的EMAIL:[email protected]
      

  4.   

    //==============================================================================
    //取得网络适配器物理地址[列表](全球唯一)**************************************
    //==============================================================================
    procedure GetNetMacIDs(var MacIDs: string);
    var Lana_Enum: TLana_Enum;
        RetCode: Word;
        i: Integer;
    begin
      Lana_Enum := NetBiosLanaEnum;
      {enumerate lanas for WINNT }
      if Lana_Enum.Length=0 then Exit;
      for i:=0 to Lana_Enum.Length-1 do
      begin
        { for every lana found }
        RetCode := NetBiosReset(Lana_Enum.Lana[i]);
        { Reset lana for WINNT }
        if RetCode<>NRC_GOODRET then Exit;
        { Get MAC Address }
        MacIDs := MacIDs + Format('MacID %x = %s;', [Lana_Enum.Lana[i], GetMacAddress(i)]) + #13;
      end;
    end;//==============================================================================
    //取得客户端‘主机名’‘IP地址’************************************************
    //==============================================================================
    procedure GetClientInfo(var ClientName, IPAddress: string);
    var WSAData: TWSAData;
        HostEnt: PHostEnt;
    begin
      {no error checking...}
      WSAStartup(2, WSAData);
      SetLength(ClientName, 255);
      Gethostname(PChar(ClientName), 255);
      SetLength(ClientName, StrLen(PChar(ClientName)));
      HostEnt := GetHostByName(PChar(ClientName));
      with HostEnt^ do IPAddress := Format('%d.%d.%d.%d',[Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]);
      WSACleanup;
    end;
      

  5.   

    如果你用的是delphi6 有一个控件可以实现:
    TIdIPWatch  在 Indy Misc控件页下