asio编写同步阻塞的客户端(C++asio网络库相关)

io_service:跟操作系统底层打交道
tcp::resolver:调用系统函数解析地址
tcp::resolver::query:通过resolver.resolve解析成代码实际能用的地址便于之后生成的socket使用

query参数argv[1]表示IP地址执行命令行时传入,后面跟服务名称配置文件放在/etc/services,直接写服务端口号也行
/etc/hosts 是IP地址的配置文件

connect会抛出异常需要try保护起来
asio处理异常有两种方式:抛异常或传入error_code引用

socket.read_some:要对读取数据的完整性做个处理
在这里插入图片描述
std::cout.write()不会进行格式转换之类的操作,read_some()会对数据做些格式处理
asio抛出的所有异常都是从std::exception派生出来的所以用这个捕获就可以了

read_some是阻塞的会等待,对客户端来说还行,对服务器就不大合适,对不清楚数据大小的可以用read_some,对游戏服务器开发来说可以很明确知道需要读多少字节

一般游戏服务器开发都用异步方式

与用C生成socket相比显得简单,不用管字节顺序等问题

buf可以不用array,也可以用数组之类的数据结构只要最终转换成asio::buffer就行了

以下关于asio编写同步阻塞的客户端完整代码:
在这里插入图片描述在这里插入图片描述

发布了135 篇原创文章 · 获赞 33 · 访问量 1502

猜你喜欢

转载自blog.csdn.net/qq_39885372/article/details/104065658