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
반응형
'Boost C++ Libraries > Boost.Asio' 카테고리의 다른 글
Boost.Asio 튜토리얼 - Daytime.5 - 동기식 UDP daytime 서버 (0) | 2020.12.17 |
---|---|
Boost.Asio 튜토리얼 - Daytime.4 소스 (0) | 2020.12.17 |
Boost.Asio 튜토리얼 - Daytime.3 소스 (0) | 2020.12.17 |
Boost.Asio 튜토리얼 - Daytime.3 - 비동기식 TCP daytime 서버 (0) | 2020.12.16 |
Boost.Asio 튜토리얼 - Daytime.2 소스 (0) | 2020.12.16 |