C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[53050] Re:Re:Re:또 질문이 있습니다..
장성호 [nasilso] 1388 읽음    2008-04-08 14:51
위 답변에 링크된 팁의 코드는
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개를 잡을수가 없는건지
: : : 안된다면 어떤방법으로 잡아야하는지 알려주셨으면 합니다.

+ -

관련 글 리스트
53047 또 질문이 있습니다.. 번외편 1244 2008/04/08
53048     Re:또 질문이 있습니다.. civilian 1186 2008/04/08
53049         Re:Re:또 질문이 있습니다.. 번외편 1132 2008/04/08
53050             Re:Re:Re:또 질문이 있습니다.. 장성호 1388 2008/04/08
53051                 Re:Re:Re:Re:또 질문이 있습니다.. 번외편 1234 2008/04/08
53053                     Re:Re:Re:Re:Re:또 질문이 있습니다.. 이점한 1146 2008/04/08
53054                         Re:Re:Re:Re:Re:Re:또 질문이 있습니다.. 번외편 1323 2008/04/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.