私はこの機能を使用して私にデータを送信するクライアントを持っている:はブーストを使用して圧縮されたデータを受信:: ASIO
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;
}
私はブーストを使用してこのデータを受信したい:: 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!
}
}
私はデータの圧縮された問題では、とは何の関係もないと信じてio_serviceにあなたのソケットをバインドのように、あなたがio_service ::実行またはio_service :: run_oneか – Arunmu
と呼ばれているかどうか私達は...この上のより多くのコードが必要実際にはデータを受け取っていません。 – CharlesB
私はあなたのhandle_read関数でerror_codeを取得していると思います。そのerror_codeが対応するものを確認してください。しかし、やはり、あなたはasioの機能を使っているコードよりも少なくとも多くのコードを提供するべきです。 – Arunmu