我正在使用boost::asio::ip::tcp::iostream
从TCP流中读取二进制数据。我这样做:
stream.read(reinterpret_cast<char*>(&packetSize), 4); // first 4 bytes is length
stream.read(buffer, packetSize);
我应该只检查stream.gcount()
和下一个stream.gcount() == 0
,这意味着没有更多可用于阅读的数据(TCP会话已完成)?
答案 0 :(得分:0)
您正在寻找的流成员深深埋藏在基类http://en.cppreference.com/w/cpp/io/basic_ios
中使用good()和!eof()来查看是否有数据。您可以在流对象(exception())上设置标志,以指示流在发生错误的情况下抛出异常。这使处理更容易一些。