net_transfor.h
Go to the documentation of this file.
00001 /*************************************************************************
00002   > File Name: net_transfor.h
00003   > Author: 吴乃亮
00004   > Mail: wunailiang@gmail.com
00005   > Created Time: Wed 16 Jul 2014 02:12:45 PM CST
00006  ************************************************************************/
00007 #ifndef NET_TRANSFOR_H_
00008 #define  NET_TRANSFOR_H_
00009 
00010 #include <iostream>
00011 #include <boost/asio.hpp>
00012 #include <vector>
00013 #include <pcl/io/pcd_io.h>
00014 using namespace std;
00015 using boost::asio::ip::tcp;
00016 
00017 class Net_transfor
00018 {
00019     public:
00020         Net_transfor(int marker_):marker(marker_),
00021         endpoint(tcp::v4(),static_cast<unsigned int> (3556)),
00022         acceptor(io_service,endpoint),
00023         s(io_service),
00024         m1(true),
00025         m2(true),
00026         resolver(io_service),
00027         query(tcp::v4(),"192.168.0.168","3456"),
00028         iterator(resolver.resolve(query))
00029         {}
00030 
00031         bool send(pcl::PointCloud<pcl::PointXYZ>& cloud)
00032         {
00033             if(m2)
00034             {
00035                 s.connect(*iterator);
00036                 m2 = false;
00037             }
00038             int num = cloud.size();
00039             vector<short> points(num*3);
00040             const int conversion = 1000;
00041             for(size_t i =0;i<num;++i)
00042             {
00043                 const pcl::PointXYZ& point = cloud.points[i];
00044                 points[i*3+0] = static_cast<short>(point.x*conversion);
00045                 points[i*3+1] = static_cast<short>(point.y*conversion);
00046                 points[i*3+2] = static_cast<short>(point.z*conversion);
00047             }
00048             vector<int> num_of_pt(1);
00049             num_of_pt[0] = points.size();
00050             try{
00051                 boost::asio::write(s,boost::asio::buffer(num_of_pt));
00052                 boost::asio::write(s,boost::asio::buffer(points));
00053             }
00054             catch(boost::system::system_error const& e)
00055             {
00056                 cout <<"warning:"<<e.what()<<endl;
00057             }
00058             cout <<"send over" <<endl;
00059         }
00060 
00061         bool receive(pcl::PointCloud<pcl::PointXYZ>& cloud)
00062         {
00063             if(m1)
00064             {
00065                 acceptor.accept(s);
00066                 m1 = false;
00067             }
00068             vector<int> num_of_pt(1);
00069             try
00070             {
00071                 if(s.is_open()==false)
00072                     return false;
00073                 boost::asio::read(s,boost::asio::buffer(num_of_pt),boost::asio::transfer_all());
00074             }
00075             catch(boost::system::system_error const& e)
00076             {
00077                 cout <<"warning:"<<e.what()<<endl;
00078             }
00079             int num = num_of_pt[0];
00080             cout <<"num="<<num<<endl;
00081             if((num == -1) || (num == 0))
00082                 return false;
00083             cloud.clear();
00084             vector<short> buf_pt(num);
00085             try
00086             {
00087                 if(s.is_open()==false)
00088                     return false;
00089                 boost::asio::read(s,boost::asio::buffer(buf_pt),boost::asio::transfer_all());
00090             }
00091             catch(boost::system::system_error const& e)
00092             {
00093                 cout <<"warning:"<<e.what()<<endl;
00094             }
00095             cloud.clear();
00096             for(int i=0;i<num;i+=3)
00097             {
00098                 pcl::PointXYZ temp;
00099                 double x = static_cast<double>(buf_pt[i]);
00100                 double y = static_cast<double>(buf_pt[i+1]);
00101                 double z = static_cast<double>(buf_pt[i+2]);
00102                 temp.x = x/1000;
00103                 temp.y = y/1000;
00104                 temp.z = z/1000;
00105                 cloud.push_back(temp);
00106             }
00107             cout <<"received "<<cloud.size()<<"points\n";
00108             return true;
00109         }
00110 
00111         void close_receive()
00112         {
00113             s.shutdown(boost::asio::ip::tcp::socket::shutdown_both);
00114             s.close();
00115         }
00116 
00117     private:
00118         int marker;
00119         boost::asio::io_service io_service;
00120         tcp::endpoint endpoint;
00121         tcp::acceptor acceptor;
00122         tcp::socket s;
00123 
00124         bool m1;//用于开启accept
00125         bool m2;//connect
00126         tcp::resolver resolver;
00127         tcp::resolver::query query;
00128         tcp::resolver::iterator iterator;
00129 
00130 };
00131 
00132 #endif


dlut_hash_icp
Author(s): Zhuang Yan , Yan Fei, Wu Nai Liang
autogenerated on Thu Jun 6 2019 18:56:21