使用boost::asio将序列化数据写入套接字
Writing serialized data to a socket with boost::asio
我正试图设置一个函数来将序列化数据写入套接字,但我不知道应该将boost::buffer封装在什么对象上。官方boost文档中的一个示例使用std::ostringstream,并从str()成员(类型为std::string)构造缓冲区,但我无法做到这一点。
sendData(const std::vector<_t> values){
std::stringstream ss;
boost::archive::text_oarchive oa(ss);
oa << values;
int n = client_sock.write_some(boost::asio::buffer(&oa,sizeof(oa),ec);
}
当我尝试使用ss.str()而不是oa来构建缓冲区时,我得到:
error: no matching function for call to buffer(std::basic_ostringstream<char>::__string_type*&, long unsigned int&, boost::system::error_code&)’`
int n = client_sock.write_some(boost::asio::buffer(&ss.str(),sizeof(ss.str()),ec);
您可以在文档中简单地看到一些重载
std::string s = ss.str();
client_sock.write_some(boost::asio::buffer(s),ec);
或者,只需使用`
boost:::asio::streambuf sb;
std::ostream os(&sb);
// serialize into `os`
boost::asio::write(client_sock, sb);
注意不能在异步调用中使用本地变量,因为缓冲区需要保持在附近
也就是说,由于你无论如何都在使用同步IO,你可以使用Boost Asio:中实现的流
- http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/overview/networking/iostreams.html
ip::tcp::iostream stream;
stream.expires_from_now(boost::posix_time::seconds(60));
stream.connect("www.boost.org", "http");
stream << "GET /LICENSE_1_0.txt HTTP/1.0rn";
stream << "Host: www.boost.orgrn";
stream << "Accept: */*rn";
stream << "Connection: closernrn";
stream.flush();
std::cout << stream.rdbuf();
相关文章:
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- WTSEnumerateProcesses与套接字和数据结构
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- 我们可以在套接字编程中将自定义数据作为辅助数据发送吗?
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 尝试将数据从C++发送到 Python 并使用套接字C++反转,C++ sendto() 和 python recvfr
- 不要从输入队列套接字读取数据
- 通过套接字 c++ 发送长度和数据
- 如何读取套接字编程(c ++)中的所有数据?
- 使用 Broadcast 发出的从节点服务器发送的数据不能被 C++ 套接字 IO 客户端读取
- 无法通过套接字发送或接收数据
- 连接UDP套接字,但仍然接收来自其他源的数据报
- boost::asio-async_read_some示例代码没有读取套接字中的所有数据
- 使用 epoll 边缘触发器的套接字上的数据过多
- 为什么 sys 套接字 recv 函数不填充数据但返回字节长度?
- 将空数据写入非阻塞套接字会导致epoll_wait挂起
- C++ 套接字 - 发送 - 未收到数据
- 通过套接字发送的自定义数据包
- 提升ASIO TCP,为什么我不能在服务器端只有一个数据套接字可以打开和关闭