[소켓] 도메인 이름을 명령행 인자로 받아서 ip 출력하는 프로그램
온새미로
도메인 이름으로 ip 주소를 출력하는 프로그램 인데요
도메인 이름을 명령행 인자로 받아서 ip 주소를 출력하는 프로그램을 하려면
어떻게 해야하나요? 도와주세요~!!
명령행 인자를 받게하는 방법 만이라도 알려주세요.. ㅠ.ㅠ#include winsock2.h
#include stdio.h
#include stdlib.h
// 소켓 함수 오류 출력
void err_display(char *msg)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER|
FORMAT_MESSAGE_FROM_SYSTEM,
NULL, WSAGetLastError(),
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf, 0, NULL);
printf([%s] %s, msg, (LPCTSTR)lpMsgBuf);
LocalFree(lpMsgBuf);
}
// 도메인 이름- ip 주소
BOOL GetIPAddr(char *name, IN_ADDR *addr)
{
HOSTENT *ptr = gethostbyname(name);
if(ptr==NULL){
err_display(gethostbyname());
return FALSE;
}
memcpy(addr, ptr-h_addr, ptr-h_length);
return TRUE;
}
// ip 주소 - 도메인 이름
BOOL GetDomainName(IN_ADDR addr, char *name)
{
HOSTENT *ptr = gethostbyaddr((char *)&addr,sizeof(addr), AF_INET);
if(ptr==NULL){
err_display(gethostbyaddr());
return FALSE;
}
strcpy(name, ptr-h_name);
return TRUE;
}
int main(int argc, char* argv[])
{
WSADATA wsa;
if(WSAStartup(MAKEWORD(2,2), &wsa) != 0)
return -1;
// 도메인 이름 - ip 주소
char name[256];
printf( 도메인 이름 = );
scanf(%s, name);
IN_ADDR addr;
if(GetIPAddr(name, &addr)){
// 성공이면 결과 출력
printf(ip 주소 = %s \n, inet_ntoa(addr));
//ip 주소- 도메인 이름
if(GetDomainName(addr,name)){
// 성공이면 결과 출력
printf(도메인 이름 = %s \n, name);
}
}
WSACleanup();
return 0;
}
-
유희
감사합니다~*^^*
-
치리
소스가 C이시네요. 소스에 보시면 main메소드의 인자값인 int argc에 인자값의 개수와 char[] args에 인자값들이 들어 옵니다.
메인함수로 넘어오는 argc와 args를 출력해보세요 그러면 해결하실 수 있을 겁니다 ^^ -
이솔
명령행 인자는 main 메소드의 String[] args 를 통해서 받을 수 있습니다.