C boost asio tcp-сокет, считывающий старые данные

#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:

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