#c #tcp #boost-asio
#c #tcp #boost-asio
Вопрос:
Я новичок в Boost asio. У меня запущена программа сопряжения tcp-сервер-клиент, но когда я запускаю новый клиент, этот клиент также получает все старые записи. Я читаю / записываю с помощью async_read / async_write. Таким образом, сервер и клиент, возможно, работали некоторое время и отправили 100 ~ пакетов туда и обратно. Когда я открываю второй клиент и получаю на нем, я получаю все 100 старых пакетов, отправленных сервером! для ip_address используется «localhost».
Есть ли какой-нибудь способ очистить буфер или что-то в этомроде? Возможно, есть другой способ, кроме закрытия старого сокета и создания нового сокета?
Вызовы чтения / записи (не используются в этом порядке, просто скопированы оба вызова оттуда, где я их использовал):
boost::array<char, 1024> buf;
boost::array<char, 1024> rbuf;
boost::asio::async_write(socket_,
boost::asio::buffer(buf.c_array(),
buf.size()),strand_.wrap(boost::bind(amp;async_tcp_client::handle_send_msg,
this,boost::asio::placeholders::error)));
boost::asio::async_read(socket_, boost::asio::buffer(rbuf.c_array(), rbuf.size()),
strand_.wrap(boost::bind(amp;async_tcp_client::handle_read,
this, boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)));
Комментарии:
1. То, что вы говорите, не имеет смысла. TCP / IP — это протокол, основанный на соединении, поэтому данные, отправляемые по одному соединению, не должны отображаться в другом соединении. Возможно ли, что сервер реплицирует данные всем клиентам? Являются ли клиенты отдельными процессами?
Ответ №1:
Мне не ясно, как ограничены ваши буферы. Вам понадобится буфер для каждого соединения, по одному для чтения и записи. Вам также необходимо убедиться, что они остаются в пределах области видимости, пока активна асинхронная операция.