2009-10-20 97 views
2

我的问题很简单,就是使用TCP协议的异步套接字。使用异步套接字的回调

当我用“BeginSend”方法发送一些数据时,回调被调用的时间是什么?

当数据刚刚发送到网络,或者当我们确保数据到达目的地(比如它应该与TCP规范有关)时,它会被调用吗?

感谢您的回答。

KiTe。

ps:对不起,如果我的英语有点不好^ ^。

回答

3

从MSDN:

“当你的应用程序调用BeginSend,系统将使用一个单独的线程执行指定的回调方法,并直至插槽发送请求的字节数或抛出异常的EndSend将阻止“。

“发送成功完成并不表示数据已成功发送,如果传输系统中没有可用的缓冲空间来保存要发送的数据,发送将被阻塞,除非套接字已被置于非阻塞状态模式。”

http://msdn.microsoft.com/en-us/library/38dxf7kt.aspx

+0

注意这与BeginReceive/EndReceive不同。 – Jess 2010-10-20 02:32:05

3

当回调被调用,你可以肯定的是,数据已经从输出缓冲器清零(异步操作使用一个单独的线程,以确保您的调用线程没有被阻塞的情况下,没有在发送缓冲区中的房间,并且它必须等待发送日期),并且它将达到它的目的地 - 但不是已经到达了。

但是,由于TCP协议的本质,您可以肯定(当然,我想几乎可以肯定)它最终会到达目的地。

但是,出于计时目的,您不应该将回调的时间视为与数据到达另一方的时间相同。

+0

好的谢谢你们,这正是我正在寻找的东西。 – KiTe 2009-10-20 13:54:32

+0

不客气 – 2009-10-20 13:55:22