C ++ повышает asio tcp сокет чтения старых данных - PullRequest
0 голосов
/ 20 апреля 2011

Я новичок в Boost asio. У меня запущена программа для пары клиентов на tcp-сервере, но когда я запускаю нового клиента, этот клиент также получает все старые записи. Я читаю / пишу с помощью async_read / async_write. Таким образом, сервер и клиент могли работать некоторое время и отправлять 100 пакетов назад и вперед. Когда я открываю второй клиент и получаю на нем, я получаю все 100 старых отправленных сервером пакетов! "localhost" используется для ip_address.

Есть ли какой-нибудь способ очистить буфер или что-то еще? Возможно, есть другой способ, кроме закрытия старого сокета и создания нового сокета?

Вызовы чтения / записи (не используются в этом порядке, просто скопированы оба вызова с того места, где я их использовал):

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(&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(&async_tcp_client::handle_read,
    this, boost::asio::placeholders::error,
    boost::asio::placeholders::bytes_transferred)));

1 Ответ

1 голос
/ 21 апреля 2011

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

...