gpt4 book ai didi

c++ - 使用 boost::asio 将序列化数据写入套接字

转载 作者:行者123 更新时间:2023-11-30 01:49:12 26 4
gpt4 key购买 nike

我正在尝试设置一个函数来将序列化数据写入套接字,但是我不知道我应该将 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);

最佳答案

您可以简单地在 the documentation 中看到一些重载

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);

Caution You cannot use local variables with async calls because the buffer needs to stay around

也就是说,既然您无论如何都在使用同步 IO,那么您可以使用 Boost Asio 中实现的流:

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.0\r\n";
stream << "Host: www.boost.org\r\n";
stream << "Accept: */*\r\n";
stream << "Connection: close\r\n\r\n";
stream.flush();
std::cout << stream.rdbuf();

关于c++ - 使用 boost::asio 将序列化数据写入套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29446132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com