장성호님께서 번역하신 소스는 함수자나요 ..
그냥 버튼 이벤트에서 장성호님이 적으신 함수 호출 해서 쓰면 되자나요 ..
TStringList*를 리턴하는 함수니 굳이 예제를 만든다면 아래 정도 ...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList* IP_List;
// 함수 호출
IP_List = LocalIPList();
ShowMessage( IP_List->Text ); // <== 이러면 IPList가 쫙 보이겠죠 .. 설마 TStringList를 잘 모르시지는 않죠 ?
ShowMessage( IP_List->Strings[ 0 ] ); // <== 이러면 첫번째 IP가 보이겠죠 ?
ShowMessage( IP_List->Strings[ 1 ] ); // <== 이러면 두번째 IP가 보이겠죠 ?
delete IP_List; // LocalIPList() 함수에서 new로 생성 했으니 delete 해야 합니다.
}
물론 장성호님께서 번역 하신 함수도 같이 소스에 포함 되어야겠죠 ?
위 소스는 컴파일 해본건 아니라서 오타가 있을수도 있습니다. ^^;
번외편 님이 쓰신 글 :
: 죄송합니다 ㅠㅠ.. 제가 머리가 나쁜건지 급해서 그러는건지 모르지만
: 잘 안되네요..
: 성호님이 번역해주신 코드를 어떤 컴포넌트에 입력해야하는지
: 직접 눈으로 확인하려면 어떻게 하는지 알고 싶습니다.
: 그럼 많은 도움 부탁드립니다..
:
:
: 장성호 님이 쓰신 글 :
: : 위 답변에 링크된 팁의 코드는
: :
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개를 잡을수가 없는건지
: : : : : 안된다면 어떤방법으로 잡아야하는지 알려주셨으면 합니다.