我正在为一个机器人编写代码,我需要在它运行时将所有机器人的数据保存在我的计算机中以进行调试。我编写了一个名为 debug provider 的类,它有这个责任。这是我为这个类编写的代码:
void
DebugProvider::doWork()
{
boost::asio::io_service io_service;
tcp::endpoint endpoint(tcp::v4(), 10001);
tcp::acceptor acceptor(io_service, endpoint);
tcp::iostream stream;
boost::system::error_code error;
acceptor.accept(*stream.rdbuf(), error);
if(!error)
{
boost::archive::binary_oarchive oa(stream);
oa << dataProvider;
}
usleep(50);
}
doWork 方法在 boost::thread 中每 50us 调用一次,DataProvider 包含机器人中的所有数据(如相机图像、关节位置等)。
我还编写了一个简单的客户端,它从机器人获取数据并在我的笔记本电脑中显示相机图像。(因为我正在测试代码,所以它会获取一次数据)。
int main(int argc, char *argv[])
{
DataProvider dp;
tcp::iostream stream("10.1.1.1", "10001");
boost::archive::binary_iarchive ia(stream);
ia >> dp;
Mat mat = dp.getCameraImage();
imshow("camera", mat);
waitKey();
return 0;
}
我的问题是在机器人和计算机上运行程序之后。两个程序都会抛出一个 stream_error。
我尝试使用 telnet 从服务器获取数据,一切正常,但使用 boost::asio::ip::tcp 会抛出所描述的错误。