我准备使用Boost.Asio写一个IRCBot,我有函数getMsg:
std::string getMsg()
{
buffer.clear(); //make sure buffer is empty
buffer.resize(512); //make sure it's big enough for 512char
socket.read_some(boost::asio::buffer(&buffer[0],buffer.size()));
std::size_t pos = buffer.find("PING :");
if(pos != std::string::npos)
{
sendMsg("PONG :" + buffer.substr(pos + 6));
}
return buffer;
}
在我的main函数中使用std :: cout<<文本;我得到一个输出,但在尝试std :: cout<< “你好”,似乎没有发生任何事情:
while(true)
{
std::string Text = Test.getMsg();
std::cout << Text; //OUTPUT
}
while(true)
{
std::string Text = Test.getMsg();
std::cout << "TEST"; //NO OUTPUT ---- WHY?
}
答案 0 :(得分:0)
您询问的错误很可能是因为您没有刷新标准输出:std::cout << "TEST" << std::flush;
这与boost :: asio无关。
但是你的asio代码也有一个可能的错误:你正在单个读取调用中寻找PING :
,这可能永远不会在单个读取调用中接收,因为TCP的工作原理(它是一个流,而不是数据包)。如果它是UDP套接字,它将起作用。