위 답변에 링크된 팁의 코드는
http://delphi.borlandforum.com/impboard/impboard.dll?action=read&db=del_tip&no=235
function LocalIPList: TStrings;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: array[0..63] of Char;
I: Integer;
WSAData: TWSAData;
begin
WSAStartup(MakeWord(2, 2), WSAData);
Result := TStringList.Create;
Result.Clear;
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.Add(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanUp;
end;
대충 아래와 같이 C++Builder로 번역이 될것 같습니다.
TStringList * LocalIPList()
{
char Buffer[64];
int I;
WSADATA wsaData;
PHOSTENT lpHostent = NULL;
struct sockaddr_in addr;
WSAStartup(MAKEWORD( 2, 0 ), &wsaData);
TStringList *Result=new TStringList;
Result->Clear();
gethostname(Buffer, sizeof(Buffer));
lpHostent = gethostbyname(Buffer);
if( lpHostent == NULL )return NULL;
I = 0;
while(lpHostent->h_addr_list[I] != NULL)
{
memcpy( &(addr.sin_addr), lpHostent->h_addr_list[I], lpHostent->h_length );
Result->Add( inet_ntoa(addr.sin_addr) );
I++;
}
WSACleanup();
return Result;
}
그럼..
번외편 님이 쓰신 글 :
: 허걱 ㅠㅠ;;;
: 죄송하지만 제가 델파이를 아예 볼줄 몰라서요..
: 가끔 가끔 몇줄은 이해가 가지만 이걸봐도 이해가 되지는 않네요...
:
: civilian 님이 쓰신 글 :
: :
http://delphi.borlandforum.com/impboard/impboard.dll?action=read&db=del_tip&no=235
: :
: : 델파이용이긴 합니다만...
: :
: : 번외편 님이 쓰신 글 :
: : : IP 보는방법을 이런식으로 해봤습니다. 여기까지는 동작이 잘 되는데요
: : :
: : : void __fastcall TForm1::Timer1Timer(TObject *Sender)
: : : {
: : : char S[100];
: : :
: : : in_addr inadd=ClientSocket1->Socket->LookupName("");
: : : wsprintf(S,"%d.%d.%d.%d",inadd.S_un.S_un_b.s_b1
: : : ,inadd.S_un.S_un_b.s_b2
: : : ,inadd.S_un.S_un_b.s_b3
: : : ,inadd.S_un.S_un_b.s_b4);
: : :
: : :
: : : Label9->Caption = S;
: : : }
: : :
: : : 그런데 저는 IP 2개(랜카드 2개) 다 보고 싶습니다.
: : : 위 방법을 2개를 써서 해보니 한개의 IP만 잡히네요.
: : : 위와 같은 방법으로는 2개를 잡을수가 없는건지
: : : 안된다면 어떤방법으로 잡아야하는지 알려주셨으면 합니다.