Boost.Asio网络编程
sunnet2007
信息
展开
-
套接字
Boost.Asio有三种类型的套接字类:ip::tcp, ip::udp和ip::icmp。当然它也是可扩展的,你可以创建自己的socket类,尽管这相当复杂。如果你选择这样做,参照一下boost/asio/ip/tcp.hpp, boost/asio/ip/udp.hpp和boost/asio/ip/icmp.hpp。它们都是含有内部typedef关键字的超小类。你可以把ip::t原创 2015-05-04 11:00:18 · 314 阅读 · 0 评论 -
套接字缓冲区
当从一个套接字读写内容时,需要一个缓冲区,用来保存读取和写入的数据。缓冲区内存的有效时间必须必I/O操作的时间要长,需要保证它们在I/O操作结束之前不被释放。对于同步操作来说,这很容易。char buff[512];...sock.receive(buffer(buff));strcpy(buff, "ok\n");sock.send(buffer(buff));但是在异步原创 2015-05-04 14:34:53 · 639 阅读 · 0 评论 -
Boost.Asio中的线程
io_service:io_service是线程安全的。几个线程可以同时调用io_service::run()。大多数情况下你可能在一个单线程函数中调用io_service::run(),这个函数必须等到所有异步操作完成之后才能继续执行。然而,事实上可以在多个线程中调用io_service::run()。这会阻塞所有调用io_service::run()的线程。只要当中任何一个线程调用了io_se原创 2015-05-04 09:38:55 · 885 阅读 · 0 评论 -
Boost.Asio命名空间
Boost.Asio的所有内容都包含在boost::asio命名空间或者其子命名空间内1. boost::asio:这事核心类和函数所在的地方。重要的类有io_service和streambuf。类似read,read_at,read_until方法,它们的异步方法,它们的写方法和异步写方法等自由函数也在这里。2. boost::asio::ip:这是网络通信部分所在的地方。重要的类有ad原创 2015-05-04 10:07:51 · 797 阅读 · 0 评论 -
IP地址
对于IP地址的处理,Boost.Asio提供了ip::address, ip::address_v4和ip::address_v6类,它们提供了许多的函数。下面是最重要的几个:ip::address(v4_or_v6_address):这个函数把一个v4或者v6的地主转换成ip::addressip::address::from_string(str):这个函数根据一个IPv4地址(用原创 2015-05-04 10:36:34 · 508 阅读 · 0 评论 -
端点
端点是用某个端口连接到的一个地主,不同类型的socket有它自己的endpoint类,比如ip::tcp::endpoint、ip::udp::endpoint和ip::icmp::endpoint如果想连接到本机的80端口,可以这样做ip::tcp::endpoint ep(ip::address::from_string("127.0.0.1"), 80);有三种方式来建立一个端点原创 2015-05-04 10:52:13 · 603 阅读 · 0 评论 -
socket成员方法
这些方法被分成了几组。并不是所有的方法都可以在各个类型的套接字里使用。这个部分的结尾将有一个列表来展示各个方法分别属于哪个socket类。注意所有的异步方法都立刻返回,而它们相对的同步实现需要操作完成之后才能返回1. 连接相关的函数这些方法是用来连接或绑定socket、断开socket字连接以及查询连接是活动还是非活动的:assign(protocol,socket):转载 2015-05-04 11:30:15 · 873 阅读 · 0 评论 -
read/write/connect自由函数
Boost.Asio提供了处理I/O的自由函数,我们分四组来分析它们。1. connect方法这些方法把套接字连接到一个端点。connect(socket, begin [, end] [, condition]):这个方法遍历队列中从start到end的端点来尝试同步连接。begin迭代器是调用socket_type::resolver::query的返回结果(你可能需要回顾一下原创 2015-05-04 14:49:04 · 844 阅读 · 0 评论 -
解决boost::asio的WinSock.h has already been included
开始使用boost::asio库时,编译碰到这个错误提示:fatal error C1189: #error : WinSock.h has already been included查了下抛出这个错误的boost代码,原来是定义了_WINSOCKAPI_,但没有定义_WINSOCK2API_那哪里定义了_WINSOCKAPI_呢?后来在网上查了下,原来是我包含了转载 2015-05-20 13:45:58 · 380 阅读 · 0 评论