Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用异步套接字的回调_C#_Sockets_.net 3.5_Asynchronous - Fatal编程技术网

C# 使用异步套接字的回调

C# 使用异步套接字的回调,c#,sockets,.net-3.5,asynchronous,C#,Sockets,.net 3.5,Asynchronous,我的问题很简单,是关于异步套接字,使用TCP协议 当我使用“BeginSend”方法发送一些数据时,何时调用回调 当数据刚刚发送到网络时,或者当我们确保数据到达其目的地时(就像TCP规范一样),会调用它吗 谢谢你的回答 风筝 ps:如果我的英语有点差,我很抱歉。来自MSDN: 当应用程序调用BeginSend时,系统将使用单独的线程执行指定的回调方法,并在EndSend上阻塞,直到套接字发送请求的字节数或引发异常为止 成功完成发送并不表示数据已成功传递。如果传输系统中没有缓冲区空间来保存要发送的

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

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

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

谢谢你的回答

风筝

ps:如果我的英语有点差,我很抱歉。

来自MSDN:

当应用程序调用BeginSend时,系统将使用单独的线程执行指定的回调方法,并在EndSend上阻塞,直到套接字发送请求的字节数或引发异常为止

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


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

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


但是,对于时间的目的,你不应该考虑回调的时间与数据到达对方的时间相同。

OK,谢谢你们两个,这正是我正在寻找的。注意这与开始接收/结束接收不同。