我正在使用 Boost::asio Libs 构建 TCP 客户端。我的程序有一个 write() 线程,它向服务器发送命令
write(*_socket,boost::asio::buffer("sspi l1\n\n",sizeof("sspi l1\n\n")));
然后启动一个读取线程,该线程一直从缓冲区读取,因为任何其他客户端都可能从服务器广播消息
void TCP_IP_Connection::readTCP()
{
size_t l=0;
this->len=0;
boost::system::error_code error;
try
{//loop reading all values from router
while(1)
{
//wait for reply??
l=_socket->read_some(boost::asio::buffer(this->reply,sizeof(this->reply)),error);
if(error)
throw boost::system::system_error(error);
if(l>0)
{
this->dataProcess(l);
}
else
boost::this_thread::sleep(boost::posix_time::milliseconds(5000));
_io.run();
if(error==boost::asio::error::eof) //connection closed by router
std::cout<<"connection closed by router";
_io.reset();
}
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
}
}
该线程一直在 while(1) 循环中运行,并且在接收到的数据长度小于零时应该休眠。它读取所有数据并调用数据解析器函数。之后,写线程用于发送另一个命令,读线程运行。但是服务器发回的不是所需的响应
? ""
ERROR: Unknown command
我尝试使用wireshark。我可以看到命令正在正确发送。我在这里做的可能是什么错误?