使用libboost在asio tcp流上发送/接收binary_oarchive

时间:2013-10-27 16:34:27

标签: c++ boost boost-asio boost-serialization

我正在为一个机器人编码,我需要在我的计算机中运行所有机器人的数据,以便进行调试。我写了一个名为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会引发所描述的错误。

0 个答案:

没有答案