#include <boost/asio.hpp>
#include <iostream>
int main() {
using namespace std;
using namespace boost::asio::ip;
// step 1, 创建一个 io_service 实例
boost::asio::io_service svc;
// step 2, 创建一个 tcp::acceptor 对象,用于随后接受来自客户端的连接
tcp::acceptor acc(svc, tcp::endpoint(tcp::v4(), 9988));
boost::system::error_code ec;
// tcp::acceptor acc(svc);
// acc.open(tcp::v4());
//
// tcp::endpoint listenAddr(tcp::v4(), 9988);
// acc.bind(listenAddr, ec);
//
// acc.listen(10, ec);
char buf[512];
for (;;) {
// step 3, 创建一个tcp::socket对象,用于代表服务器与客户端的一条数据I/O的socket
// 随后会在accept操作中得到初始化
tcp::socket sock(svc);
// step 4, 调用 tcp::acceptor::accept(),初始化sock对象,
// 如果该操作成功执行,sock对象即可以用于随后的数据I/O
acc.accept(sock, ec);
if (ec) {
cerr << "acc.accept(): An error occurred: " << ec.message() << '\n';
continue;
}
for (;;) {
// step 5, 接收来自客户端的消息
// sock.read_some()
// std::size_t len = sock.read_some(
// boost::asio::buffer(buf, sizeof buf), ec);
// sock.receive()
// std::size_t len = sock.receive(boost::asio::buffer(buf, sizeof buf),
// 0, ec);
// free function boost::asio::read()
std::size_t len = boost::asio::read(sock,
boost::asio::buffer(buf, sizeof buf),
boost::asio::transfer_at_least(1), ec);
if (ec) {
if (ec != boost::asio::error::eof)
cerr << "sock.read_some(): An error occurred: "
<< ec.message() << '\n';
break;
}
// step 6, 将接收到的消息原封不动的发回客户端
boost::asio::write(sock, boost::asio::buffer(buf, len),
boost::asio::transfer_all(), ec);
if (ec) {
cerr << "write(): An error occurred: " << ec.message() << '\n';
break;
}
}
} // sock 对象销毁
}
boost TCP 同步IO服务端 代码
最新推荐文章于 2022-11-10 15:35:35 发布