【Boost】boost库asio详解5——resolver与endpoint使用说明

时间:2024-01-08 14:06:50

tcp::resolver一般和tcp::resolver::query结合用,通过query这个词顾名思义就知道它是用来查询socket的相应信息,一般而言我们关心socket的东东有address,port而已,通过tcp::resolver很容易实现设置和查询,它通过query把字符串格式的ip如192.168.0.200或主机名http://localhost,端口“8080”等转化成socket内部表示格式,这样我们应用的时候可以直接使用字符串的形式,而且不用再担心socket的字节顺序转化问题。示例如下:

还有要说明的是, boost::asio把通讯双方(server, client)都用endpoint的表示,所以endpoint中的address, port 分别封装了ip和端口。貌似resolver和endpoint不相干,于是乎出现tcp::resolver::iterator了,它是resolver的迭代器,其实就是endpoint的指针,那么就可以这样:

得到endpoint后就好说啦,endpoint.address().to_string()就能够返回string格式的ip地址,endpoint.port()返回端口。

其实endpoint 完全可以自己构造,方法也是很简单的,tcp::endpoint(tcp::v4(), (unsigned short)9000) 这个是server端的用法,tcp::v4()直接返回自己的address,如果用于client那么需要设置server的ip ,实现如下:

这样不使用resolver也是可以的。
还有更神奇的:

上面这个例子的运行结果: