【问题标题】:Callbacks using asynchronous sockets使用异步套接字的回调
【发布时间】:2009-10-20 13:42:35
【问题描述】:

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

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

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

感谢您的回答。

风筝。

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

【问题讨论】:

    标签: c# sockets .net-3.5 asynchronous


    【解决方案1】:

    来自 MSDN:

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

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

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

    【讨论】:

    • 请注意,这与 BeginReceive/EndReceive 不同。
    【解决方案2】:

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

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

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

    【讨论】:

    • 好的,谢谢你们,这正是我正在寻找的。​​span>
    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多