2011-08-12 28 views

回答

8

据我记得,read_some收到实际上是一样的。我认为只需要调用read_some,反之亦然。在一个命名来源于治疗插座为文件(读/写)的想法,而另一人,而来自于连接(发送/接收)的观点。 write_some发送也应如此。

+1

你有一定的参考/链接?我在boost文档中找不到任何内容,boost示例不使用'send' /'receive'。 – overcoder

0

相同。 。都调用了这个 - > get_service()发送()

/// Send some data on the socket. 
/** 
* This function is used to send data on the stream socket. The function 
* call will block until one or more bytes of the data has been sent 
* successfully, or an until error occurs. 
* 
* @param buffers One or more data buffers to be sent on the socket. 
* 
* @returns The number of bytes sent. 
* 
* @throws boost::system::system_error Thrown on failure. 
* 
* @note The send operation may not transmit all of the data to the peer. 
* Consider using the @ref write function if you need to ensure that all data 
* is written before the blocking operation completes. 
* 
* @par Example 
* To send a single data buffer use the @ref buffer function as follows: 
* @code 
* socket.send(boost::asio::buffer(data, size)); 
* @endcode 
* See the @ref buffer documentation for information on sending multiple 
* buffers in one go, and how to use it with arrays, boost::array or 
* std::vector. 
*/ 
template <typename ConstBufferSequence> 
std::size_t send(const ConstBufferSequence& buffers) 
{ 
    boost::system::error_code ec; 
    std::size_t s = this->get_service().send(
    this->get_implementation(), buffers, 0, ec); 
    boost::asio::detail::throw_error(ec, "send"); 
    return s; 
} 

//////////////////////////////////////////// 
template <typename ConstBufferSequence> 
std::size_t write_some(const ConstBufferSequence& buffers) 
{ 
    boost::system::error_code ec; 
    std::size_t s = this->get_service().send(
    this->get_implementation(), buffers, 0, ec); 
    boost::asio::detail::throw_error(ec, "write_some"); 
    return s; 
} 

从basic_stream_socket.hpp

4

BOOST ASIO documentation,部分TCP客户端说:

的数据可以被读取或写入到receive(),async_receive(),send()或async_send()成员函数使用 连接的TCP套接字。 然而,因为这些可能导致short writes or reads, 应用程序通常会使用以下操作来代替: 的read(),async_read(),write()方法和ASYNC_WRITE()。