Vector 通过套接字传递动态数组

Vector 通过套接字传递动态数组,vector,void-pointers,reinterpret-cast,Vector,Void Pointers,Reinterpret Cast,我对套接字编程相当陌生,我有一个可以发送固定大小数据包的应用程序。 我希望能够使用向量在本地存储这些消息结构,然后通过SOCK_流连接发送所有消息结构。在我看来,要做到这一点,我需要将向量转换为静态数组。我编写了一些测试代码,只是想看看是否可以创建一个带有向量的类,该类可以导入和导出无效向量数据。将向量转换为void*不是问题,而是将其转换回。下面是我的最佳尝试和输出 #include <iostream> #include <vector> #include <m

我对套接字编程相当陌生,我有一个可以发送固定大小数据包的应用程序。 我希望能够使用向量在本地存储这些消息结构,然后通过SOCK_流连接发送所有消息结构。在我看来,要做到这一点,我需要将向量转换为静态数组。我编写了一些测试代码,只是想看看是否可以创建一个带有向量的类,该类可以导入和导出无效向量数据。将向量转换为void*不是问题,而是将其转换回。下面是我的最佳尝试和输出

#include <iostream>
#include <vector>
#include <memory>
#include <string.h>

using namespace std;

struct Message
{
  struct MessageHeader
  {
    int thing1, thing2, thing3;
  } header;
  struct MessageData
  {
    char text[256];
  } data;
};

class MsgMgr
{
public:

  std::vector < Message > vec;

  size_t getVoidData (void *data)
  {
    size_t sz = vec.size () * sizeof (Message);
      data = new Message[vec.size ()];
      memcpy (data, static_cast < void *>(vec.data ()), sz);
      return vec.size ();
  }

  void importVoidData (void *data, size_t msgCount)
  {
    std::vector < Message > temp;
    temp.assign (msgCount,
         reinterpret_cast < std::vector < Message > &>(data));
  }

};

int main ()
{
  Message m;
  m.header = {2, 3, 4};
  strcpy (m.data.text, "This is a test");
  MsgMgr mgr;
  for (int i = 0; i < 100; ++i)
    mgr.vec.push_back (m);

  void *txContainer = 0;
  size_t msgCount = mgr.getVoidData (txContainer);

  MsgMgr mgr2;
  mgr2.importVoidData (txContainer, msgCount);

  return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
结构消息
{
结构消息头
{
int thing1,thing2,thing3;
}收割台;
结构消息数据
{
字符文本[256];
}数据;
};
类MsgMgr
{
公众:
std::vectorvec;
大小\u t获取无效数据(无效*数据)
{
size_t sz=vec.size()*sizeof(消息);
数据=新消息[vec.size()];
memcpy(数据,静态转换(vec.data()),sz);
返回vec.size();
}
void importVoidData(void*数据,大小\u t msgCount)
{
标准::向量<消息>温度;
温度分配(msgCount,
重新解释(数据);
}
};
int main()
{
消息m;
m、 头={2,3,4};
strcpy(m.data.text,“这是一项测试”);
MsgMgr经理;
对于(int i=0;i<100;++i)
经理向量推回(m);
void*txContainer=0;
size\u t msgCount=mgr.getVoidData(txContainer);
MsgMgr经理2;
经理2.importVoidData(txContainer,msgCount);
返回0;
}
输出

main.cpp: In member function ‘void MsgMgr::importVoidData(void*, size_t)’:
main.cpp:38:55: error: no matching function for call to ‘std::vector::assign(size_t&, std::vector&)’
    reinterpret_cast < std::vector < Message > &>(data));
main.cpp:在成员函数“void MsgMgr::importVoidData(void*,size_t)”中:
main.cpp:38:55:错误:调用“std::vector::assign(size\u t&,std::vector&)”时没有匹配的函数
重新解释(数据);