C++ 的NIO怎么实现
时间: 2023-07-11 14:26:28 浏览: 59
在 C++ 中,可以使用 Boost.Asio 库来实现 NIO(New Input/Output)模型。Boost.Asio 提供了高效的异步网络编程和底层 I/O 操作支持,可以实现 TCP、UDP、SSL 等协议的数据传输。
下面是一个简单的 Boost.Asio TCP 客户端的实现示例:
```cpp
#include <iostream>
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
int main() {
try {
boost::asio::io_context io_context;
// 创建 TCP socket
tcp::socket socket(io_context);
// 连接服务器
tcp::resolver resolver(io_context);
boost::asio::connect(socket, resolver.resolve("localhost", "daytime"));
// 发送请求
std::string request = "Hello, server!";
boost::asio::write(socket, boost::asio::buffer(request));
// 接收响应
char response[1024];
boost::asio::read(socket, boost::asio::buffer(response, request.size()));
// 输出响应
std::cout << "Response: " << response << std::endl;
} catch (std::exception& e) {
std::cerr << "Exception: " << e.what() << std::endl;
}
return 0;
}
```
在这个示例中,首先创建了一个 io_context 对象,它是 Boost.Asio 库的核心。然后创建了一个 TCP socket 对象,并使用 resolver 对象解析服务器地址。接着使用 connect 函数连接服务器,并使用 write 函数发送请求,使用 read 函数接收响应。最后输出响应字符串。
需要注意的是,上述示例中的所有 I/O 操作都是异步的,要使用回调函数来进行处理。例如,可以使用 async_read 函数来进行异步读取操作,然后在回调函数中处理读取到的数据。