二、C++ boost::asio 的使用

上一节介绍了visual studio搭建boost环境,现在我们来使用它来进行网络编程。

1、网络编程基本流程

服务端

1)socket——创建socket对象。

2)bind——绑定本机ip+port。

3)listen——监听来电,若在监听到来电,则建立起连接。

4)accept——再创建一个socket对象给其收发消息。
   原因是现实中服务端都是面对多个客户端,那么为了区分各个客户端,
   则每个客户端都需再分配一个socket对象进行收发消息。
5)read、write——就是收发消息了。

客户端

1)socket——创建socket对象。

2)connect——根据服务端ip+port,发起连接请求。

3)write、read——建立连接后,就可发收消息了。

在使用boost中的asio进行网络编程时,头文件为

#include <boost/asio.hpp>

2、终端节点的创建

        关于终端结点的创建,可以有几种方式:

        第一种:客户端可以使用这种方式,较为麻烦

	// std::string raw_ip_address:字符串变量,表示IP地址
	std::string raw_ip_address = "127.4.8.1";
	// unsigned short port_num:无符号短整型变量,表示端口号
	unsigned short port_num = 3333;
	// boost::system::error_code ec:错误码对象,用于存储可能出现的错误信息
	boost::system::error_code ec;
	// 将字符串形式的IP地址 raw_ip_address 转换为 boost::asio::ip::address 类型的对象 ip_address
	// 并将可能出现的错误信息存储在 ec 中
	boost::asio::ip::address ip_address = boost::asio::ip::address::from_string(raw_ip_address, ec);
	// 如果 ec.value() 不等于0
	if (ec.value() != 0) {
		// 输出错误码和错误信息,并返回错误码
		std::cout << "ip地址解析错误,错误码:" << ec.value() << ",错误信息:" << ec.message() << std::endl;
		return ec.value();
	}
	// 创建一个 boost::asio::ip::tcp::endpoint 对象 ep,它表示一个网络端点
	// 由IP地址 ip_address 和端口号 port_num 组成
	boost::asio::ip::tcp::endpoint ep(ip_address, port_num);

         第二种:针对服务端的方法,不需要指定ip,获取自己的ip即可

	unsigned short port_num = 3333;
	// 可以绑定到所有可用的IPv6接口。这种设置通常用于服务器端,以便接收来自任何网络接口的连接
	boost::asio::ip::address ip_address = boost::asio::ip::address_v6::any();
	boost::asio::ip::tcp::endpoint ep(ip_address, port_num);

         第三种:简化方法,这种使用起来较为方便,代码简洁

boost::asio::ip::tcp::endpoint remote_ep(boost::asio::ip::address::from_string("127.0.0.1"), 10086);

3、创建socket

        创建socket分为4步,创建上下文iocontext,选择协议,绑定上下文信息,打开socket。

	// boost::asio::io_context ioc:I/O 上下文对象。
	// 它管理所有异步 I/O 操作的执行,所有的网络操作都依赖于它来处理事件循环
	boost::asio::io_context ioc;
	// boost::asio::ip::tcp 对象,指定使用 TCP 协议
	// 如果希望使用 IPv6,可以使用 boost::
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值