У меня есть клиент, который отправляет мне данные, используя эту функцию:
void CServerRetrieve::Send(char *buf, DWORD size, int flags)
{
unsigned char *zlib;
unsigned long szzlib;
m_zlib.Deflate((unsigned char*)buf, size + 1, &zlib, &szzlib); // include the terminating 0 char
char zbuf[5];
zbuf[0] = 'Z';
memcpy(&zbuf[1], &szzlib, 4);
send(m_Socket, zbuf, 5, flags);
send(m_Socket, (char*)zlib, szzlib, flags);
delete [] zlib;
}
Я хочу получить эти данные с помощью Boost :: asio, однако я не уверен, какой тип буфера я должен передать socket.async_receive
, чтобы он мог получить эти данные?
Я пробовал std::vector<char>
и std::vector<std::string>
, однако в моем буфере не было получено никаких данных?
Может ли кто-нибудь помочь мне в том, что я делаю неправильно?
void tcp_connection::start()
{
socket_.async_receive(boost::asio::buffer(buff), boost::bind(&tcp_connection::handle_read, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
}
void tcp_connection::handle_read(const boost::system::error_code& err, size_t bytes_transferred)
{
if (!err || err == boost::asio::error::message_size)
{
size_t sz = buff.size(); //always 0!
}
}