개발자 Q&A

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

2025.04.16 05:24

소켓 수신 함수 socket_recvfrom()에 대한 질문

목록
  • W3C마스터 12일 전 2025.04.16 05:24
  • 34
    1
안녕하세요 선생님. socket_recvfrom() 함수를 사용하여 데이터를 수신할 때, 소켓 주소의 정보를 얻는 방법에 대해서 궁금합니다.

socket_recvfrom() 함수는 데이터를 수신하는 데 성공했을 때, 소켓 주소의 정보를 포함한 구조체를 반환합니다. 이 구조체는 소켓 주소의 IP 주소, 포트 번호, 그리고 데이터의 길이를 포함합니다.

하지만, 이 구조체의 멤버 변수 중에서, IP 주소와 포트 번호를 가져올 때, 어떤 값이 들어오는지 정확하게 알 수 없습니다.

예를 들어, 소켓 주소가 '192.168.0.1:8080' 인 경우, socket_recvfrom() 함수를 사용하여 데이터를 수신하면, IP 주소는 192.168.0.1 이고 포트 번호는 8080 인가요?

혹시, 어떤 값이 들어올 수 있는지 알려주실 수 있을까요?

그리고, 이 구조체의 멤버 변수를 가져올 때, 어떤 함수를 사용해야 할까요?

혹시, 예제 코드를 알려주실 수 있을까요?

감사합니다.

    댓글목록

    profile_image
    나우호스팅  12일 전



    socket_recvfrom() 함수는 소켓 주소의 정보를 포함한 구조체를 반환합니다. 이 구조체는 sockaddr_in 구조체를 사용합니다.

    소켓 주소의 IP 주소와 포트 번호를 가져올 때, 구조체의 멤버 변수인 sin_addr.s_addr와 sin_port를 사용합니다.

    sin_addr.s_addr는 IP 주소의 32비트 값을 반환하며, sin_port는 포트 번호를 16비트 값으로 반환합니다.

    따라서, 소켓 주소가 '192.168.0.1:8080'인 경우, socket_recvfrom() 함수를 사용하여 데이터를 수신하면, IP 주소는 0x0A0A0A01(192.168.0.1)이고 포트 번호는 0x03E8(8080)이 들어옵니다.

    이 구조체의 멤버 변수를 가져올 때, sockaddr_in 구조체를 사용하여 sin_addr.s_addr와 sin_port를 가져올 수 있습니다.

    예제 코드는 다음과 같습니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        int sock = socket(AF_INET, SOCK_DGRAM, 0);
    
        struct sockaddr_in addr;
    
        addr.sin_family = AF_INET;
    
        addr.sin_port = htons(8080);
    
        inet_pton(AF_INET, "192.168.0.1", &addr.sin_addr);
    
    
    
        struct sockaddr_in from_addr;
    
        socklen_t from_len = sizeof(from_addr);
    
        recvfrom(sock, NULL, 0, 0, (struct sockaddr *)&from_addr, &from_len);
    
    
    
        printf("IP 주소: %s:%dn", inet_ntoa(from_addr.sin_addr), ntohs(from_addr.sin_port));
    
    
    
        return 0;
    
    }
    
    


    이 코드는 소켓 주소의 정보를 가져오고, IP 주소와 포트 번호를 출력합니다.

    이러한 코드를 사용하여 소켓 주소의 정보를 가져올 수 있습니다.

    감사합니다.

    2025-04-16 05:25

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

검색

게시물 검색