У меня есть простой UDP-сервер, созданный с использованием boost\asio
, который пока только печатает полученные данные, как показано ниже.
using boost::asio::ip::udp;
enum { max_length = 2048 };
void server(boost::asio::io_context& io_context, unsigned short port)
{
std::cout << "Server Created on port " + std::to_string(port) << " \n" << std::flush;
udp::socket sock(io_context, udp::endpoint(udp::v4(), port));
while(true)
{
udp::endpoint sender_endpoint;
std::vector<char> v(max_length);
sock.receive_from(boost::asio::buffer(v), sender_endpoint);
for (int i = 0; i < v.size(); i++)
{
std::cout << v[i] <<std::flush;
}
std::cout << std::endl;
}
}
Я создаю 3 потока функции server
, используя boost::thread
, который назначаю thread_group
:
boost::asio::io_context io_context;
boost::thread_group tg;
boost::thread *t = new boost::thread(server, std::ref(io_context), 8889);
boost::thread *t1 = new boost::thread(server, std::ref(io_context), 8890);
boost::thread *t2 = new boost::thread(server, std::ref(io_context), 11111);
tg.add_thread(t);
tg.add_thread(t1);
tg.add_thread(t2);
tg.join_all();
Для проверки сервера, который я использовал Отправитель пакета . Проблема в том, что вывод ... scrambled . При отправке пакетов на 3 порта (более или менее) в одно и то же время один раз в секунду выходной сигнал слегка смещается, но при увеличении частоты пакетов до одного раза в 0,1 секунды выходной сигнал становится нечитаемым, как показано в , эти два изображения . Я попытался дать один отдельный объект io_context
каждому серверу, но на высокой частоте выходной сигнал остается прежним. Есть ли способ избежать этого?