Я отправляю сообщение переменного размера через TCP-сокет zeromq. В примерах http://zguide.zeromq.org/cpp:wuclient было предложено использовать std::istringstream
для анализа данных. Проблема в том, что он не учитывает другой размер буфера. Я заканчиваю тем, что получаю конец более длинного предыдущего сообщения, добавляемый в конец более короткого.
Простой std::string(static_cast<char*>(request.data()), request.size());
прекрасно работает для получения всего сообщения, но я хотел бы использовать std::istringstream
, потому что я собираюсь передавать различные типы данных (примитивные типы данных + std :: string в качестве последней переменной), так что std::istringstream
может быть хорошим выбором для разбора сообщения.
Так что здесь все правильно будет помещено в переменную rpl
zmq::message_t request;
// Wait for next request from client
socket_.recv (&request);
auto rpl = std::string(static_cast<char*>(request.data()), request.size());
std::cout << rpl << std::endl;
Но это не будет:
zmq::message_t request;
// Wait for next request from client
socket_.recv (&request);
std::istringstream iss(static_cast<char*>(request.data()));
std::string rpl;
iss >> rpl;
std::cout << rpl << std::endl;
Как мне обойти это и сказать std::istringstream
каков фактический размер буфера, чтобы получить правильную длину строки?