#include "winsock.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    WSAData wsaData;
    WSAStartup(MAKEWORD(2,0),&wsaData);     //初始化WINSOCK调用    char HostName[64];                      //存放本主机名
    gethostname(HostName,sizeof(HostName)); //得到主机名
    Edit1->Text=HostName;    HOSTENT *lpHostEnt=gethostbyname(HostName); //利用主机名去取主机结构
    for (int i=0; lpHostEnt->h_addr_list[i]!=NULL; i++)
     {
        IN_ADDR *p=(IN_ADDR *)(lpHostEnt->h_addr_list[i]);
        String IP=inet_ntoa(*p);            //数字地址转换成带.的IP串
        Memo1->Lines->Add(IP);
     }
    WSACleanup();                          //释放WINSOCK调用
}

解决方案 »

  1.   

    这是C++的,让你参考,
    有的机子有多个IP地址,都能一一显示出;
      

  2.   

    procedure TForm1.ButtonIPClick(Sender: TObject);
      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);
            Exit;
          end;
          pPtr := PaPInAddr(phe^.h_addr_list);
          I := 0;
          while pPtr^[I] <> nil do
          begin
            IP := inet_ntoa(pptr^[I]^);
            Inc(I);
          end;
          WSACleanup;
          ShowMessage(IP);
        finally
          Screen.Cursor := crDefault;
        end;
    end;
      

  3.   

    如果做网络方面的话,加一个nmrtp ,它有一个localip属性,就是你的ip