std::socket 用法
时间: 2024-11-22 15:35:12 浏览: 19
`std::socket`是C++11及以后版本提供的一种基础网络编程工具,它属于 `<net>` 头文件下的标准网络接口。以下是使用`std::socket`的基本步骤:
1. **包括头文件**:
```cpp
#include <boost/asio.hpp>
```
或者
```cpp
#include <iostream>
#include <boost/asio.hpp> // 如果你不想依赖C++20
```
2. **初始化asio服务**:
```cpp
boost::asio::io_context io_service;
```
3. **创建套接字**:
```cpp
boost::asio::ip::tcp::socket socket(io_service);
```
4. **绑定地址**:
```cpp
boost::asio::ip::address ip_address = boost::asio::ip::address_v4::from_string("127.0.0.1");
boost::asio::ip::port_t port = 8080;
socket.bind({ip_address, port});
```
5. **监听连接**:
```cpp
if (!socket.listen(1)) {
// 处理错误
}
```
6. **接受连接请求**:
```cpp
boost::asio::ip::tcp::acceptor acceptor(io_service, socket.local_endpoint());
boost::asio::async_accept(acceptor, socket, [](const boost::system::error_code& error, boost::asio::ip::tcp::socket new_socket) {
if (!error) {
// 新连接已经建立,你可以在此处处理新连接
} else {
// 错误处理
}
});
```
7. **发送和接收数据**:
```cpp
boost::array<char, 1024> receive_buffer;
boost::asio::async_read(socket, boost::asio::buffer(receive_buffer), [&](const boost::system::error_code& error, std::size_t bytes_transferred) {
if (!error) {
// 数据已接收,处理数据
} else {
// 错误处理
}
});
char send_buffer[] = "Hello, World!";
boost::asio::write(socket, boost::asio::buffer(send_buffer), sizeof(send_buffer));
```
8. **关闭套接字**:
```cpp
socket.shutdown(boost::asio::socket_base::shutdown_both);
```
9. **等待io_service运行结束**:
```cpp
io_service.run();
```
这只是一个基本示例,实际应用可能需要添加错误处理、线程安全等考虑。另外,如果你的项目不支持C++20,可以考虑使用Boost.Asio库来替代标准库中的网络编程功能。
阅读全文