C++ 如何通过boost asio向客户端发送OpenNI depthmap?

C++ 如何通过boost asio向客户端发送OpenNI depthmap?,c++,boost,boost-asio,kinect,openni,C++,Boost,Boost Asio,Kinect,Openni,我正在尝试通过boost asio向客户端发送kinect深度映射,而无需序列化 现在最好尝试异步还是同步我的方法是同步: 像这样 server: //depthmap const XnDepthPixel* pDepthMap = depth.GetDepthMap(); boost::asio::write (socket, boost::asio::buffer (pDepthMap, sizeof(pDepthMap))); //sizeof isnt right.. client:

我正在尝试通过boost asio向客户端发送kinect深度映射,而无需序列化 现在最好尝试异步还是同步我的方法是同步:

像这样

server:
//depthmap
const XnDepthPixel* pDepthMap = depth.GetDepthMap();
boost::asio::write (socket, boost::asio::buffer (pDepthMap, sizeof(pDepthMap))); //sizeof isnt right..

client:
XnDepthPixel* depth;
socket.read_some( boost::asio::buffer (&depth, sizeof(XnDepthPixel)* ?? )); //send sizeof(pDepthMap) before..
编辑: XnDepthPixel的定义也来自OpenNI:

/** Defines the depth values type (16-bit values). **/
typedef XnUInt16 XnDepthPixel
和XnUInt16:

/** 16-bit unsigned integer. */ 
typedef unsigned short      XnUInt16;
SizeOffDepthMap只是指针的大小,但实际上您想要的是发送一些结构,而不是指向它的指针

请看一看ASIO序列化,看看如何使用Boost.Serialization完成它。
如果您不想使用Boost.Serialization,您可以通过某种专有方式自行序列化您的结构。

异步或同步并不重要。您需要将XnDepthPixel对象转换为字节流。你能用XnDepthPixel的定义编辑这个问题吗?好的。。def。已添加..谢谢您的回答。。我想序列化库是没有选择的。。现在我不知道如何获取实际数据,而不是作为指针,所以我将它们保存在一个额外的数组中。。似乎工作效率不高,但有了wifi,这个循环不会增加任何时间