streamsize sgetn(char_type *store,streamsize n) 返回缓冲区下n个字符并存储到store中,并将缓冲区位置后移n个字节
代码说明:本来是想不断的通过sgetn函数获取到streambuf的内容,由于没有完全理解sgetn获取流的方式,导致了问题的产生
int Teststreambuf()
{
boost::asio::streambuf request;
std::ostream request_stream(&request);
request_stream << "GET /cs/restfull/operationRestfullApi/testGet/ HTTP/1.1\r\n";
request_stream << "Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n";
request_stream << "Accept-Language: zh-CN\r\n";
request_stream << "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\r\n";
request_stream << "Host: " << "192.168.0.88:8080" << "\r\n";
request_stream << "Connection: Keep-Alive\r\n\r\n";
//当第一次使用sgetn函数的时候,已经将所有的数据读完,指向流的结束位置
char buf[1024] = { 0 };
int len = request.size();
request.sgetn(buf, len);
//当第二次使用sgetn函数的时候,由于第一次函数调用指向了流的结束位置,
//所以第二次读取到的buf1是空的