在SSL客户端服务器模型中,我使用下面的代码从客户端或服务器端的套接字读取数据.
我只在有可用数据时读取数据.要知道,当有可用的数据,我检查available()的方法lowest_layer()的asio::ssl::stream.在我从客户端向服务器发送380个字节并在服务器上输入read方法后,我看到以下内容.
's'是我提供的缓冲区.
'n'是我提供的缓冲区的大小.
'a1'是读取之前的available()的结果,将报告458个字节.
'r'是实际读取的字节数.它将报告380,这是正确的.
'a2'是读取后的available()的结果,将报告0字节.这是我所期望的,因为我的客户端发送了380个字节,而且我已经读完了所有内容.
为什么第一次调用available()报告太多字节?
类型:
/**
* Type used as SSL Socket. Handles SSL and socket functionality.
*/
typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> SslSocket;
/**
* A shared pointer version of the SSL Socket type.
*/
typedef boost::shared_ptr<SslSocket> ShpSslSocket;
Run Code Online (Sandbox Code Playgroud)
成员:
ShpSslSocket m_shpSecureSocket;
Run Code Online (Sandbox Code Playgroud)
部分读取方法:
std::size_t a1 = 0;
if ((a1 = m_shpSecureSocket->lowest_layer().available()) > 0)
{
r += boost::asio::read(*m_shpSecureSocket,
boost::asio::buffer(s, n),
boost::asio::transfer_at_least(1));
}
std::size_t a2 = m_shpSecureSocket->lowest_layer().available();
Run Code Online (Sandbox Code Playgroud)
补充信息:
所以我改变了我的read方法,以便更彻底地检查是否还有可以从boost :: asio :: ssl …