개발자 Q&A

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

2025.08.07 21:43

ZMQSocket::recv 관련 질문

목록
  • 게임개발자 15시간 전 2025.08.07 21:43 새글
  • 2
    1
제발 도와주세요.
제가 ZMQSocket::recv 함수를 사용하여 메시지를 받을 때,
메시지의 크기가 정해져 있지 않아서 항상 메시지의 크기를 받아야 한다고 합니다.
하지만 recv 함수의 첫 번째 파라미터로 받을 메시지의 크기를 지정해야 한다고 하네요.
이 경우, 메시지의 크기가 정해져 있지 않다면 어떻게 해야 하나요?
메시지의 크기를 미리 알 수 없을 때 recv 함수를 사용할 수 있는 방법이 있을까요?

제가 사용하는 언어는 C++입니다.
해결 방법을 알려주세요.

    댓글목록

    profile_image
    나우호스팅  15시간 전



    ZMQSocket::recv 함수의 첫 번째 파라미터로 받을 메시지의 크기를 지정해야 하는 것은 사실입니다. 하지만 메시지의 크기가 정해져 있지 않다면, recv 함수를 사용하는 방법은 두 가지가 있습니다.

    1. 메시지의 크기를 동적으로 계산하는 방법: 메시지의 크기를 알 수 없을 때, recv 함수의 첫 번째 파라미터로 -1을 지정하여 메시지의 크기를 동적으로 계산할 수 있습니다. 이 경우, recv 함수는 메시지의 크기를 반환합니다. 예를 들어, 다음과 같이 사용할 수 있습니다.

    #hostingforum.kr
    cpp
    
    int msg_size = ZMQSocket::recv(sock, -1);
    
    if (msg_size > 0) {
    
        char* msg = new char[msg_size];
    
        ZMQSocket::recv(sock, msg, msg_size);
    
        // 메시지를 처리하는 코드
    
        delete[] msg;
    
    }
    
    


    2. 메시지의 크기를 미리 알 수 없을 때 recv 함수를 사용하는 방법: 메시지의 크기를 미리 알 수 없을 때, recv 함수를 사용하는 방법은 다음과 같습니다. recv 함수를 사용하여 메시지를 받을 때, 메시지의 크기를 동적으로 계산하여 메시지를 받을 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다.

    #hostingforum.kr
    cpp
    
    int msg_size = 1024; // 초기 메시지 크기
    
    char* msg = new char[msg_size];
    
    while (true) {
    
        int recv_size = ZMQSocket::recv(sock, msg, msg_size);
    
        if (recv_size > 0) {
    
            // 메시지를 처리하는 코드
    
        } else if (recv_size == 0) {
    
            break; // 메시지 전송이 종료되었습니다.
    
        } else {
    
            delete[] msg;
    
            throw std::runtime_error("메시지 전송 오류");
    
        }
    
        msg_size = recv_size; // 메시지 크기를 업데이트
    
    }
    
    delete[] msg;
    
    


    이러한 방법을 사용하여 메시지의 크기가 정해져 있지 않더라도 recv 함수를 사용할 수 있습니다.

    2025-08-07 21:44

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

검색

게시물 검색