使用异步套接字的回调

时间:2009-10-20 13:42:35

标签: c# sockets .net-3.5 asynchronous

我的要求非常简单,是关于异步套接字,使用TCP协议。

当我使用“BeginSend”方法发送一些数据时,何时会调用回调?

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

感谢您的回答。

风筝。

ps:如果我的英语有点不好,我很抱歉^^。

2 个答案:

答案 0 :(得分:3)

来自MSDN:

“当你的应用程序调用BeginSend时,系统将使用一个单独的线程来执行指定的回调方法,并在EndSend上阻塞,直到Socket发送所请求的字节数或引发异常。”

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

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

答案 1 :(得分:3)

当调用回调时,您可以确保数据已从输出缓冲区中清除(异步操作使用单独的线程,以确保在发送缓冲区中没有空间时不阻止调用线程)它必须等待发送日期)并且它将到达它的目的地 - 但不是它已经到达它。

由于TCP协议的性质,你可以肯定(好吧,我猜几乎可以肯定)它最终会到达目的地。

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