【发布时间】:2012-06-14 19:43:40
【问题描述】:
我一直想知道 BeginRecieve 调用提供的回调何时被触发。
- 是在它接收到缓冲区可以容纳的数据时吗? 如果是这样 - 如果数据小于缓冲区怎么办)
- 是不是收到一个 TCP/IP 包的时候?
- 还有别的吗?
我发现了一个类似的问题,我将重复一遍,因为我不能说得更清楚:
现在所有文档都说回调,如 BeginReceive,一旦“接收到数据”就被调用。但这是 相当模糊:如果你不知道那一刻到底是什么时候 正是其他进程正在提供数据?
一个标准是 BeginReceive() 被认为已完成(因此 callbask 被调用)当状态对象中的缓冲区被填充时 达到指定的缓冲区大小。但是,如果“交付”过程是 以未知数量和不规则模式提供数据?为了 例如,如果它首先连续发送 100 个字节,然后 是 1 毫秒的时间间隔,后面还有 200 个字节:确实 BeginReceive 完成 100 字节的传入数据?还是300?
http://www.pcreview.co.uk/forums/exactly-beginreceive-socket-considered-completed-t2899270.html
【问题讨论】:
-
我认为这取决于type of socket。当接收到数据报时,数据报套接字可能会调用回调。流套接字可能有超时、内部缓冲区等。
-
你有没有发现这件事的真相。我正在寻求答案,而此页面上的答案似乎并不明确。 stackoverflow.com/questions/18418613/…
标签: .net sockets asynchronous