以下分別列出 Dlephi 版及 C++ 版的取得 Local IP address 範例:

//
// Delphi版本 (written by Huanlin Tsai)
//
procedure TForm1.Button1Click(Sender: TObject);
var
  szHostName: array [0..256] of char;
  AWSAData: TWSAData;
  p_HostEnt: PHostEnt;
  addr: TInAddr;
  i: integer;
  p: PChar;
begin
  Memo1.Clear;
  lblHostName.Caption := '(Unknown)';
  if (WSAStartup(MAKEWORD(1, 1), AWSAData) <> 0) then
  begin
    ShowMessage('WSAStartup error');
    Exit;
  end;

  if GetHostName(@szHostName, 256) = SOCKET_ERROR then
  begin
    lblHostName.Caption := '(Error getting host name)';
    Exit;
  end;
  lblHostName.Caption := szHostName;

  p_HostEnt := GetHostByName(szHostName);
  if p_HostEnt = nil then
  begin
    ShowMessage('Bad host lookup!');
    Exit;
  end;
  i := 0;
  while True do
  begin
    // h_addr_list 是一個指標,它指向另一個指標
    // 或者說,它是一個指向字元陣列的指標
    p := p_HostEnt^.h_addr_list^;
    if p[i] = #0 then
      break;
    Move(p[i], addr, sizeof(TInAddr));
    Memo1.Lines.Add('Address ' + IntToStr(i) + ': ' + inet_ntoa(addr));
    Inc(i);
  end;
end;

//
// C++ 版本 (取自 Winsock FAQ)
//
#include 
#include 
#include 

int doit(int, char**)
{
  char ac[80];
  if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR) {
      cerr << "Error " << WSAGetLastError() <<
              " when getting local host name." << endl;
      return 1;
  }
  cout << "Host name is " << ac << "." << endl;

  struct hostent* phe = gethostbyname(ac);
  if (phe == 0) {
      cerr << "Yow!  Bad host lookup." << endl;
      return 1;
  }

  for (int i = 0; phe->h_addr_list[i] != 0; ++i) {
    struct in_addr addr;
    memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
    cout << "Address " << i << ": " << inet_ntoa(addr) << endl;
  }

  return 0;
}


int main(int argc, char* argv[])
{
  WSAData wsaData;
  if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0)
    return 255;

  int retval = doit(argc, argv);

  WSACleanup();
  getch();
  return retval;
}

    Source: geocities.com/huanlin_tsai/faq

               ( geocities.com/huanlin_tsai)