为什么套接字BeginSend将花费太长时间

奥斯卡·卡斯蒂布兰科

我有以下代码

        byte[] bytes = Encoding.Default.GetBytes(data);
        IAsyncResult res = socket.BeginSend(bytes, 0, bytes.Length, 0, new AsyncCallback(SendCallback), socket);
        int waitingCounter = 0;
        while (!res.IsCompleted && waitingCounter<10)
        {
            if (Tracing.TraceInfo) Tracing.WriteLine("Waiting for data to be transmited. Give a timeout of 1 second", _traceName);
            Thread.Sleep(1 * 1000);
            waitingCounter++;
        }

这段代码已经安装在许多机器上,但是在某些情况下,条件res.IsCompleted花费很长时间才能成立。

原因与网络有关,也许是防火墙,代理?或到客户端(太慢)或到服务器?

我无法重现这种情况。

编辑:我尝试通过使用异步客户端和同步服务器来重现错误

进行以下修改:Client =>

while (true) { 
        Send(client, "This is a test<EOF>");
        sendDone.WaitOne();
}

服务器=>

while (true){
         Console.WriteLine("Waiting for a connection...");
         // Program is suspended while waiting for an incoming connection.
         Socket handler = listener.Accept();
         data = null;

         // Show the data on the console.
         Console.WriteLine("Text received : {0}", data);

         handler.Shutdown(SocketShutdown.Both);
         handler.Close();
}

在第二个Send()中,我得到一个套接字异常。这是正常现象,因为服务器未读取数据。但是实际上我想重现的是:

等待数据传输。给出1秒的超时等待数据传输。给出1秒的超时等待数据传输。给出1秒的超时等待数据传输。给出1秒的超时等待数据传输。给出1秒的超时

由于它发生在我们的其中一个安装中

编辑:这个问题的答案不见了!!!

Pooven

即使BeginSend不会拖延您的应用程序,它也应具有与相同的约束Send这个答案解释了为什么事情会出错(我已经解释过):

对于您的应用程序,TCP缓冲区,网络和本地发送TCP缓冲区是一个很大的缓冲区。如果远程应用程序从其TCP缓冲区读取新字节时被延迟,最终您的本地TCP缓冲区将最终(几乎)已满。在TCP缓冲区有足够的空间来存储您要发送的有效负载之前,发送不会完成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么Android Studio构建过程花费太长时间

来自分类Dev

NSURLConnection花费太长时间

来自分类Dev

为什么dd花费的时间太长?

来自分类Dev

getFrameBufferPixels在libgdx中花费太长时间

来自分类Dev

MySQL jdbc连接花费太长时间

来自分类Dev

iOS UIWebView loadRequest花费太长时间

来自分类Dev

phpexcel脚本花费太长时间

来自分类Dev

iOS UIWebView loadRequest花费太长时间

来自分类Dev

超时功能,如果花费太长时间

来自分类Dev

为什么非阻塞TCP套接字会在:: write()调用中花费大量时间?

来自分类Dev

为什么非阻塞TCP套接字会在:: write()调用中花费大量时间?

来自分类Dev

C#异步套接字方法(BeginSend / BeginReceive等)是否必须是静态的?如果是这样,为什么?

来自分类Dev

如何检查为什么NSXMLParser的initWithContentsOfURL方法花费的时间太长?

来自分类Dev

为什么 UDP 套接字在 Python 中需要这么长时间?

来自分类Dev

为什么mongo总计花费这么长时间?

来自分类Dev

将套接字的异步方法BeginSend的调用排队

来自分类Dev

如果花费太长时间取消解析请求

来自分类Dev

Listview花费太长时间来更新C#

来自分类Dev

如果方法花费太长时间完成,则超时

来自分类Dev

如何中断花费太长时间的PHP函数?

来自分类Dev

LINQ DBcontext花费太长时间来加载数据

来自分类Dev

使用子查询花费太长时间的sort_by

来自分类Dev

万一花费太长时间,如何取消OdbcConnection.Open()?

来自分类Dev

sql最后记录的行花费太长时间查询

来自分类Dev

数独在序言上花费太长时间解决

来自分类Dev

Listview花费太长时间来更新C#

来自分类Dev

LINQ DBcontext花费太长时间来加载数据

来自分类Dev

如果花费太长时间,则监视进程并回显

来自分类Dev

识别网站是否花费太长时间进行响应

Related 相关文章

  1. 1

    为什么Android Studio构建过程花费太长时间

  2. 2

    NSURLConnection花费太长时间

  3. 3

    为什么dd花费的时间太长?

  4. 4

    getFrameBufferPixels在libgdx中花费太长时间

  5. 5

    MySQL jdbc连接花费太长时间

  6. 6

    iOS UIWebView loadRequest花费太长时间

  7. 7

    phpexcel脚本花费太长时间

  8. 8

    iOS UIWebView loadRequest花费太长时间

  9. 9

    超时功能,如果花费太长时间

  10. 10

    为什么非阻塞TCP套接字会在:: write()调用中花费大量时间?

  11. 11

    为什么非阻塞TCP套接字会在:: write()调用中花费大量时间?

  12. 12

    C#异步套接字方法(BeginSend / BeginReceive等)是否必须是静态的?如果是这样,为什么?

  13. 13

    如何检查为什么NSXMLParser的initWithContentsOfURL方法花费的时间太长?

  14. 14

    为什么 UDP 套接字在 Python 中需要这么长时间?

  15. 15

    为什么mongo总计花费这么长时间?

  16. 16

    将套接字的异步方法BeginSend的调用排队

  17. 17

    如果花费太长时间取消解析请求

  18. 18

    Listview花费太长时间来更新C#

  19. 19

    如果方法花费太长时间完成,则超时

  20. 20

    如何中断花费太长时间的PHP函数?

  21. 21

    LINQ DBcontext花费太长时间来加载数据

  22. 22

    使用子查询花费太长时间的sort_by

  23. 23

    万一花费太长时间,如何取消OdbcConnection.Open()?

  24. 24

    sql最后记录的行花费太长时间查询

  25. 25

    数独在序言上花费太长时间解决

  26. 26

    Listview花费太长时间来更新C#

  27. 27

    LINQ DBcontext花费太长时间来加载数据

  28. 28

    如果花费太长时间,则监视进程并回显

  29. 29

    识别网站是否花费太长时间进行响应

热门标签

归档