Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 套接字的boost序列化_C++_Serialization_Boost - Fatal编程技术网

C++ 套接字的boost序列化

C++ 套接字的boost序列化,c++,serialization,boost,C++,Serialization,Boost,我想使用boost序列化通过网络使用套接字发送结构。我看了他们的教程(),但它只显示了保存和加载到文件 我修改了结构以包含serialize()函数,并尝试使用教程中用于socket文件的相同技术,但没有成功: #include <boost/archive/binary_oarchive.hpp> #include <boost/archive/binary_iarchive.hpp> int sock = socket()... boost::archive::b

我想使用boost序列化通过网络使用套接字发送结构。我看了他们的教程(),但它只显示了保存和加载到文件

我修改了结构以包含serialize()函数,并尝试使用教程中用于socket文件的相同技术,但没有成功:

#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>

int sock = socket()...

boost::archive::binary_oarchive oa(sock);
oa << mystruct;
我不想用asio做任何事。我只想序列化数据(使用boost序列化)并通过标准套接字发送数据


图书馆不打算这样使用吗?如何将boost序列化与标准套接字(没有asio)一起使用?

boost归档类构造函数需要流或streambuf对象。你可以:

  • 构建/利用写入网络套接字的流类,例如ASIO
  • 特别是如果预期的文件大小很小,可以将其序列化到内存(使用ostringstream),然后使用普通函数将结果数据从字符串写入套接字
    • 您可以使用一个。您可以将它与
      boost::iostreams::stream
      boost::iostreams::stream\u buf
      一起使用


      另一方面,考虑将整个原始套接字封装起来。

      uffi,我认为你有一个巨大的概念混乱。据我所知,你们打算通过网络发送文件,是吗?因此,您应该首先读取文件并使用其流通过套接字发送字节。将套接字描述符传递给binary_archive的构造函数没有意义。我在内存中有一个结构,需要通过线路发送字节。我不能只发送&myStruct,sizeof(myStruct),因为结构包含指针。我认为在这种情况下序列化是正常的。如果我想尝试第二种方法,我会创建一个std::ostringstream,然后将其交给构造函数吗?然后在用boost序列化后,只调用read()来获取字节?我猜您必须从流中获取字符串,然后将其后面的字符缓冲区写入套接字。除非您对使用ASIO或另一个答案中提到的boost:.iostreams库有特殊要求,否则我会首先尝试使用该方法。好的答案是boost针对tcp iostream的文档毫无意义。它没有显示如何从客户端或服务器端,或从套接字或端点或任何东西创建一个。只是一些奇怪的模板,需要一堆参数,其中许多是没有意义的。
      // client. The connection::async_write() function will automatically
      // serialize the data structure for us.