Boost C++ Libraries/Boost.Asio

Boost.Asio 튜토리얼 - Daytime.4 - 동기식 UDP daytime 클라이언트

까마귀75 2020. 12. 17. 08:47
728x90
반응형

Daytime.4 - 동기식 UDP daytime 클라이언트 (A synchronous UDP daytime client)

이 튜토리얼 프로그램은 asio를 사용하여 UDP용 클라이언트 응용프로그램을 구현하는 방법을 보여준다.

#include <iostream>
#include <boost/array.hpp>
#include <boost/asio.hpp>

using boost::asio::ip::udp;


응용프로그램의 시작은 TCP daytime 클라이언트와 기본적으로 동일하다.

int main(int argc, char* argv[])
{
  try
  {
    if (argc != 2)
    {
      std::cerr << "Usage: client <host>" << std::endl;
      return 1;
    }

    boost::asio::io_context io_context;


ip::udp::resolver 개체를 사용하여 호스트 및 서비스 이름을 기반으로 올바른 원격 엔드포인트(endpoint)를 찾는다. 쿼리는 ip::udp::v4() 인수에 의해 IPv4 엔드포인트(endpoint)만 반환하도록 제한된다.

    udp::resolver resolver(io_context);
    udp::endpoint receiver_endpoint =
      *resolver.resolve(udp::v4(), argv[1], "daytime").begin();


ip::udp::resolver::resolve() 함수는 실행에 실패하지 않는 경우, 반환된 목록에서 하나 이상의 엔드포인트(endpoint)가 있다는 것을 보장된다.

UDP는 데이터그램 지향이므로, 스트림 소켓을 사용할 수 없다. ip::udp::socket을 생성하고 원격 엔드포인트(endpoint)와 연결을 시작한다.

    udp::socket socket(io_context);
    socket.open(udp::v4());

    boost::array<char, 1> send_buf  = {{ 0 }};
    socket.send_to(boost::asio::buffer(send_buf), receiver_endpoint);


이제 서버가 우리에게 보내는 모든 것을 받아들일 준비가 되어 있어야 한다. 서버의 응답을 받는 클라이언트 측 엔드포인트(endpoint)는 ip::udp::socket::receive_from()로 시작될 것이다.

    boost::array<char, 128> recv_buf;
    udp::endpoint sender_endpoint;
    size_t len = socket.receive_from(
        boost::asio::buffer(recv_buf), sender_endpoint);

    std::cout.write(recv_buf.data(), len);
  }


마지막으로 모든 예외를 처리한다.

  catch (std::exception& e)
  {
    std::cerr << e.what() << std::endl;
  }

  return 0;
}


전체 소스 보기

돌아가기: 튜토리얼 페이지

이전: Daytime.3 - 비동기식 TCP daytime 서버
다음: Daytime.5 - 동기식 UDP daytime 서버

원본 링크

728x90
반응형