我习惯使用boost::asio::ip::tcp::sockets来构建它们io_service.这很有用,因为我有一个单独io_service的所有套接字,这些套接字共享一个线程池.
现在,我正在尝试使用a boost::asio::ip::tcp::io_stream,我希望它在同一个线程池中执行所有异步工作.但是,似乎不可能用外部构造一个.底层套接字确实使用内部初始化的io_service.有我的方式继续使用我的集中管理有?tcp::io_streamio_serviceio_servicetcp::io_stream
我正在使用boost版本1.62.
您可以将boost::asio::ip::tcp::socket对象设置到流缓冲区中:
#include <boost/asio.hpp>
namespace ba = boost::asio;
using ba::ip::tcp;
int main() {
ba::io_service svc;
tcp::socket s(svc);
// e.g. connect to test service
s.connect({{}, 6767});
tcp::iostream stream;
stream.rdbuf()->socket() = std::move(s);
for (std::string line; getline(stream, line);) {
std::reverse(line.begin(), line.end());
stream << line << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
当在端口 6767 上运行 netcat 会话时:
#include <boost/asio.hpp>
namespace ba = boost::asio;
using ba::ip::tcp;
int main() {
ba::io_service svc;
tcp::socket s(svc);
// e.g. connect to test service
s.connect({{}, 6767});
tcp::iostream stream;
stream.rdbuf()->socket() = std::move(s);
for (std::string line; getline(stream, line);) {
std::reverse(line.begin(), line.end());
stream << line << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
收到的回复是:
This is
Not so bad
After all
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |