Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Daytime.4 - A synchronous UDP daytime client

Boost , Boost.Asio , Tutorial

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Эта учебная программа показывает, как использовать Asio для реализации клиентского приложения с UDP.

#include <iostream>
#include <boost/array.hpp>
#include <boost/asio.hpp>
using boost::asio::ip::udp;

Запуск приложения практически такой же, как и для дневного клиента TCP.

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

Мы используемip::udp::resolverНайти правильную удаленную конечную точку для использования на основе названий хоста и службы. Запрос ограничивается возвратом только конечных точек IPv4 поip::udp::v4(). 1 аргумент.

    udp::resolver resolver(io_service);
    udp::resolver::query query(udp::v4(), argv[1], "daytime");

ip::udp::resolver::resolve()Функция гарантированно возвращает хотя бы одну конечную точку в списке, если она не выходит из строя. Это означает, что безопасно отменять обратную стоимость напрямую.

    udp::endpoint receiver_endpoint = *resolver.resolve(query);

Поскольку UDP ориентирован на дейтаграммы, мы не будем использовать потоковый сокет. Создайтеip::udp::socketи инициируйте контакт с удаленной конечной точкой.

    udp::socket socket(io_service);
    socket.open(udp::v4());
    boost::array<char, 1> send_buf  = {{ 0 }};
    socket.send_to(boost::asio::buffer(send_buf), receiver_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.5 — синхронный дневной сервер UDP


PrevUpHomeNext

Статья Daytime.4 - A synchronous UDP daytime client раздела Boost.Asio Tutorial может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Tutorial ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 06:34:43/0.0059869289398193/0