boost TCP 同步IO服务端 代码

#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 对象销毁
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值