protocols.qbk
来自「Boost provides free peer-reviewed portab」· QBK 代码 · 共 129 行
QBK
129 行
[/ / Copyright (c) 2003-2008 Christopher M. Kohlhoff (chris at kohlhoff dot com) / / Distributed under the Boost Software License, Version 1.0. (See accompanying / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) /][section:protocols TCP, UDP and ICMP]Boost.Asio provides off-the-shelf support for the internet protocols TCP, UDP andICMP.[heading TCP Clients]Hostname resolution is performed using a resolver, where host and service namesare looked up and converted into one or more endpoints: ip::tcp::resolver resolver(my_io_service); ip::tcp::resolver::query query("www.boost.org", "http"); ip::tcp::resolver::iterator iter = resolver.resolve(query); ip::tcp::resolver::iterator end; // End marker. while (iter != end) { ip::tcp::endpoint endpoint = *iter++; std::cout << endpoint << std::endl; }The list of endpoints obtained above could contain both IPv4 and IPv6 endpoints,so a program may try each of them until it finds one that works. This keeps theclient program independent of a specific IP version.When an endpoint is available, a socket can be created and connected: ip::tcp::socket socket(my_io_service); socket.connect(endpoint);Data may be read from or written to a connected TCP socket using the [linkboost_asio.reference.basic_stream_socket.receive receive()], [linkboost_asio.reference.basic_stream_socket.async_receive async_receive()], [linkboost_asio.reference.basic_stream_socket.send send()] or [linkboost_asio.reference.basic_stream_socket.async_send async_send()] member functions.However, as these could result in [link boost_asio.overview.core.streams short writesor reads], an application will typically use the following operations instead:[link boost_asio.reference.read read()], [link boost_asio.reference.async_readasync_read()], [link boost_asio.reference.write write()] and [linkboost_asio.reference.async_write async_write()].[heading TCP Servers]A program uses an acceptor to accept incoming TCP connections: ip::tcp::acceptor acceptor(my_io_service, my_endpoint); ... ip::tcp::socket socket(my_io_service); acceptor.accept(socket);After a socket has been successfully accepted, it may be read from or writtento as illustrated for TCP clients above.[heading UDP]UDP hostname resolution is also performed using a resolver: ip::udp::resolver resolver(my_io_service); ip::udp::resolver::query query("localhost", "daytime"); ip::udp::resolver::iterator iter = resolver.resolve(query); ...A UDP socket is typically bound to a local endpoint. The following code willcreate an IP version 4 UDP socket and bind it to the "any" address on port`12345`: ip::udp::endpoint endpoint(ip::udp::v4(), 12345); ip::udp::socket socket(my_io_service, endpoint);Data may be read from or written to an unconnected UDP socket using the [linkboost_asio.reference.basic_datagram_socket.receive_from receive_from()], [linkboost_asio.reference.basic_datagram_socket.async_receive_from async_receive_from()],[link boost_asio.reference.basic_datagram_socket.send_to send_to()] or [linkboost_asio.reference.basic_datagram_socket.async_send_to async_send_to()] memberfunctions. For a connected UDP socket, use the [linkboost_asio.reference.basic_datagram_socket.receive receive()], [linkboost_asio.reference.basic_datagram_socket.async_receive async_receive()], [linkboost_asio.reference.basic_datagram_socket.send send()] or [linkboost_asio.reference.basic_datagram_socket.async_send async_send()] member functions.[heading ICMP]As with TCP and UDP, ICMP hostname resolution is performed using a resolver: ip::icmp::resolver resolver(my_io_service); ip::icmp::resolver::query query("localhost", "daytime"); ip::icmp::resolver::iterator iter = resolver.resolve(query); ...An ICMP socket may be bound to a local endpoint. The following code will createan IP version 6 ICMP socket and bind it to the "any" address: ip::icmp::endpoint endpoint(ip::icmp::v6(), 0); ip::icmp::socket socket(my_io_service, endpoint);The port number is not used for ICMP.Data may be read from or written to an unconnected ICMP socket using the [linkboost_asio.reference.basic_raw_socket.receive_from receive_from()], [linkboost_asio.reference.basic_raw_socket.async_receive_from async_receive_from()],[link boost_asio.reference.basic_raw_socket.send_to send_to()] or [linkboost_asio.reference.basic_raw_socket.async_send_to async_send_to()] memberfunctions. For a connected ICMP socket, use the [linkboost_asio.reference.basic_raw_socket.receive receive()], [linkboost_asio.reference.basic_raw_socket.async_receive async_receive()], [linkboost_asio.reference.basic_raw_socket.send send()] or [linkboost_asio.reference.basic_raw_socket.async_send async_send()] member functions.[heading Other Protocols]Support for other socket protocols (such as Bluetooth or IRCOMM sockets) can beadded by implementing the [link boost_asio.reference.Protocol Protocol] typerequirements.[heading See Also][link boost_asio.reference.ip__tcp ip::tcp],[link boost_asio.reference.ip__udp ip::udp],[link boost_asio.reference.ip__icmp ip::icmp],[link boost_asio.tutorial.tutdaytime1 daytime protocol tutorials].[endsect]
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?