개발자 Q&A

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

2025.03.08 06:14

socket_recvfrom 함수 사용 중 오류 발생

목록
  • C++장인 12일 전 2025.03.08 06:14
  • 9
    1
socket_recvfrom 함수를 사용하여 데이터를 수신하려고하는데, 아래와 같은 오류가 발생합니다.

c

int sockfd = socket(AF_INET, SOCK_DGRAM, 0);

struct sockaddr_in servaddr;

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(1234);

servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");



bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));



char buffer[1024];

struct sockaddr_in fromaddr;

socklen_t fromlen = sizeof(fromaddr);



int bytes_received = recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr *)&fromaddr, &fromlen);



이 코드에서 recvfrom 함수를 사용하여 데이터를 수신하려고하는데, 오류가 발생합니다. recvfrom 함수의 마지막 두 개의 인자에 대해 질문드리고 싶습니다.

recvfrom 함수의 마지막 두 개의 인자는 무엇을 의미하고, 이 두 인자를 사용하여 데이터를 수신하는 방법을 알려주세요.

    댓글목록

    profile_image
    나우호스팅  12일 전



    recvfrom 함수의 마지막 두 개의 인자는 다음과 같습니다.

    - 마지막 인자: `struct sockaddr *addr`
    - 데이터를 받은 소켓의 주소를 저장할 변수의 주소를 전달합니다.
    - 이 변수는 `struct sockaddr_in` 타입의 변수여야 합니다.
    - 이 변수는 `recvfrom` 함수가 데이터를 받은 소켓의 주소를 저장합니다.

    - 두 번째 마지막 인자: `socklen_t *addrlen`
    - `addr` 변수의 크기를 저장할 변수의 주소를 전달합니다.
    - 이 변수는 `socklen_t` 타입의 변수여야 합니다.
    - 이 변수는 `recvfrom` 함수가 데이터를 받은 소켓의 주소 크기를 저장합니다.

    recvfrom 함수를 사용하여 데이터를 수신하는 방법은 다음과 같습니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    
        if (sockfd < 0) {
    
            perror("socket");
    
            exit(1);
    
        }
    
    
    
        struct sockaddr_in servaddr;
    
        servaddr.sin_family = AF_INET;
    
        servaddr.sin_port = htons(1234);
    
        servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    
    
    
        if (bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
    
            perror("bind");
    
            exit(1);
    
        }
    
    
    
        char buffer[1024];
    
        struct sockaddr_in fromaddr;
    
        socklen_t fromlen = sizeof(fromaddr);
    
    
    
        int bytes_received = recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr *)&fromaddr, &fromlen);
    
        if (bytes_received < 0) {
    
            perror("recvfrom");
    
            exit(1);
    
        }
    
    
    
        printf("Received data: %sn", buffer);
    
    
    
        close(sockfd);
    
        return 0;
    
    }
    
    


    이 코드에서는 `recvfrom` 함수의 마지막 두 개의 인자를 사용하여 데이터를 수신합니다. `fromaddr` 변수는 데이터를 받은 소켓의 주소를 저장하고, `fromlen` 변수는 `fromaddr` 변수의 크기를 저장합니다.

    2025-03-08 06:15

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

검색

게시물 검색