Boost :: Asio одноранговый чат UDP

Я пишу одноранговую (не должна иметь сервер — это задача) программу для обмена текстовыми сообщениями. Это очень маленький чат. Просто сообщения, больше ничего. Это моя первая практика с Boost :: Asio, поэтому у меня есть несколько вопросов.

Мой чат должен быть одноранговым, как я уже сказал, и должен использовать протокол UDP. Я думаю, что лучше всего использовать трансляцию. И первая проблема: как я могу узнать о новых подключениях?

Другая проблема заключается в отправке сообщения: я отправляю его по широковещательному адресу, а затем оно распространяется на все компьютеры в локальной сети. Это правильно?

Этот код отправляет сообщение и получает его обратно. Как эхо. Это правильно?

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

int main()
{
try
{
namespace ip = boost::asio::ip;
boost::asio::io_service io_service;

ip::udp::socket socket(io_service,
ip::udp::endpoint(ip::udp::v4(), 1555));
socket.set_option(boost::asio::socket_base::broadcast(true));

ip::udp::endpoint broadcast_endpoint(ip::address_v4::broadcast(), 1555);

boost::array<char, 4> buffer1;
socket.send_to(boost::asio::buffer(buffer1), broadcast_endpoint);

ip::udp::endpoint sender_endpoint;

boost::array<char, 4> buffer2;
std::size_t bytes_transferred =
socket.receive_from(boost::asio::buffer(buffer2), sender_endpoint);

std::cout << "got " << bytes_transferred << " bytes." << std::endl;
}
catch (std::exception &e)
{
std::cerr << e.what();
}

system("PAUSE");

return 0;
}

4

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]