2010-05-18 28 views
7

数据可以被读取或使用 接收(),async_receive写入 连接TCP套接字(),发送()或 async_send()成员函数。 然而,因为这些可能导致 短写入或读取,应用程序 通常会使用以下 操作来代替:阅读(), async_read(),write()方法和 ASYNC_WRITE()。boost.asio的套接字的接收/发送功能不好?

我真的不明白,作为read(),async_read(),write()和async_write()的说法也可能以简写或读取结束,对吧?
为什么这些功能不一样?
我应该使用它们吗?
有人能为我澄清那句话吗?

回答

6

async_read写入,和 ASYNC_WRITE组成函数调用类函数多次,直到被发送请求的字节数。为方便起见,它们被图书馆包括在内。否则,每个开发人员都需要实现相同的逻辑。

类函数直接包含底层的OS函数,基本上在文档中声明:这些函数可能会在所有字节传输之前返回。

在大多数情况下,您应该使用免费(组合)功能来传输数据。

+0

为什么会是这样设计的?在这种情况下,您不需要接收所有请求的字节? 为什么socket对象不包含read/write/async_read/async_write?无论如何,你正在传递一个套接字。 – 2010-05-19 19:48:47

+0

我不知道为什么,但是您可以在“TR2 Networking Library Proposal”中找到答案。 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2054.pdf – Dan 2010-05-20 12:51:58

+1

关于以前链接的文档,请看第8页。 – Dan 2010-05-20 13:09:36

-1

首先,你必须理解单词“异步”,它只是意味着“不需要等待”。 异步操作被调用后,以下操作将执行而不等待异步操作返回。虽然同步必须等待,直到先前的同步操作返回。 从Boost.Asio的以下两个样本将使意义: A synchronous TCP daytime server

(!哎呀没有足够的声誉,第二抽样容易找到,虽然,被称为“异步TCP daytime服务器”)

+0

这与我的问题有什么关系? – 2010-05-19 19:47:00

+0

对不起....我想你的问题的第一段是一个报价...所以我ingore他们..... – rhapsodyn 2010-05-20 05:23:06