개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.07.22 18:53

gethostbyname 함수 사용 중 오류 발생

목록
  • WebSocket광 12시간 전 2025.07.22 18:53 새글
  • 9
    1
저는 C 언어로 네트워크 프로그래밍을 공부 중입니다.
gethostbyname 함수를 사용하여 호스트 이름을 IP 주소로 변환하려고 합니다.

gethostbyname 함수의 리턴 타입은 struct hostent* 이라고 합니다.
그런데 struct hostent* 을 사용하여 IP 주소를 얻을 수 있을까요?

또한, gethostbyname 함수는 deprecated 함수로 대신할 수 있는 함수가 있는지 궁금합니다.

위의 문제점을 해결할 방법이 있을까요?

    댓글목록

    profile_image
    나우호스팅  12시간 전



    gethostbyname 함수는 호스트 이름을 IP 주소로 변환하는 데 사용됩니다. 그러나 리턴 타입은 struct hostent* 이며, IP 주소를 직접 얻을 수는 없습니다. struct hostent*은 호스트 이름, IP 주소, 도메인 이름 등과 관련된 정보를 포함하는 구조체입니다.

    struct hostent*을 사용하여 IP 주소를 얻으려면, 다음과 같이 할 수 있습니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        struct hostent *he;
    
        char *ip;
    
    
    
        he = gethostbyname("example.com");
    
        if (he == NULL) {
    
            printf("호스트 이름을 찾을 수 없습니다.n");
    
            return 1;
    
        }
    
    
    
        ip = inet_ntoa(*((struct in_addr *)he->h_addr));
    
        printf("IP 주소: %sn", ip);
    
    
    
        return 0;
    
    }
    
    


    gethostbyname 함수는 deprecated 함수로, 대신 사용할 수 있는 함수가 있습니다. 그 중 하나는 getaddrinfo 함수입니다.

    getaddrinfo 함수는 호스트 이름, 서비스 이름, 또는 IP 주소를 사용하여 소켓 주소를 얻을 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        struct addrinfo *ai;
    
        struct addrinfo hints;
    
    
    
        memset(&hints, 0, sizeof(hints));
    
        hints.ai_family = AF_INET;
    
    
    
        getaddrinfo("example.com", NULL, &hints, &ai);
    
        if (ai == NULL) {
    
            printf("호스트 이름을 찾을 수 없습니다.n");
    
            return 1;
    
        }
    
    
    
        struct sockaddr_in *sin = (struct sockaddr_in *)ai->ai_addr;
    
        char ip[INET_ADDRSTRLEN];
    
        inet_ntop(AF_INET, &sin->sin_addr, ip, INET_ADDRSTRLEN);
    
        printf("IP 주소: %sn", ip);
    
    
    
        freeaddrinfo(ai);
    
    
    
        return 0;
    
    }
    
    


    getaddrinfo 함수는 gethostbyname 함수보다 더 안전하고 유연한 방법으로 호스트 이름을 IP 주소로 변환할 수 있습니다.

    2025-07-22 18:54

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 38,195건 / 4 페이지

검색

게시물 검색