boost::iostream readline 在 4096 字节后停止

boost::iostream readline stop after 4096 bytes

本文关键字:字节 iostream readline boost 4096      更新时间:2023-10-16

我正在编写一个通过网络传输大数据的程序,我正在使用boost asio iostream来做到这一点。

这是我的代码:

boost::asio::ip::tcp::iostream s;
s.connect("localhost","4000"); 
string ss;
getline(s,ss);

但是,当输出超过 4096 个字符时,getline 不会读取完整的行,并将其分成两条消息。

当输入很大时,读取单行的正确方法是什么?

我不是在复制这个

  • Ubuntu Linux 14.10 64 位
  • 海湾合作委员会 4.8.2
  • boost_1_57
  • 本地主机流量

您是否检查了输入中没有换行符?


如果我给它输入连续的输入流,我不会检测到此类问题。 例如,使用网猫,Live On Coliru

for a in {1..1024}; do echo -n 0123456789; done | nc -l 6767& 

这将发送 10k 的数据而不带换行符

./a.out | wc 

这将计算我们的代码返回的行、单词和字符:

 0       1   10240

法典

供参考

#include <boost/asio.hpp>
#include <iostream>
int main() {
    boost::asio::ip::tcp::iostream socket("127.0.0.1","6767"); 
    std::string as_read;
    std::getline(socket,as_read);
    std::cout << as_read;
}