在C#(.net)下具有HTTP服务器的Keep-Alive套接字如何发送几个查询?

康迪夫

新手问题。因此,我尝试使用此代码在同一套接字上多次调用http服务器获取资源:

 public void TryReuseSameSocket(){
            var addr = Dns.GetHostAddresses("stackoverflow.com");
            var socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
            try
            {
                // i thought that i must to use this option
                socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, 1);
                socket.Connect(addr, 80);
                var bigbuff = new byte[10000];
                for (var i = 0; i < 20; i++)
                {
                    //now i try to call some URL many times without socket closing
                    var buff = Encoding.ASCII.GetBytes("GET /help/badges HTTP/1.1\r\nHost: stackoverflow.com\r\nConnection: Keep-Alive\r\n\r\n");
                    socket.Send(buff);
                    var reciveCount = 0;
                    var totalCount = 0;
                    while (true)
                    {
                        reciveCount = socket.Receive(bigbuff);
                        totalCount += reciveCount;
                        if (0 == reciveCount) break;
                    }
                    //only first call will proceed, all others will not have a result
                    Assert.AreNotEqual(0,totalCount);

                }

            }
            finally
            {
                socket.Dispose();
            }
        }

但是只有第一个呼叫继续进行,所有其他呼叫都完全不返回任何数据。

如何正确使用HTTP服务器重用套接字。

usr

您正在读取流,直到它被远程端关闭。在此之后,您将不会获得任何数据,这是有道理的。

您需要使服务器保持活动连接。这是通过设置一个保持活动的HTTP标头来完成的。您似乎正在这样做。

使用HTTP保持活动状态,服务器将设置Content-Length标头以告诉您要读取多少字节。精确地读取那么多字节。之后,发送下一个请求。

TCP保持活动(SocketOptionName.KeepAlive)与HTTP保持活动无关。删除该代码。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将带有套接字的大文件发送到服务器C#

来自分类Dev

使用套接字C#客户端/服务器发送文件

来自分类Dev

在C#中使用.net UDP套接字发送字节

来自分类Dev

C#构建Web套接字服务器

来自分类Dev

有没有办法在 C# 中检查服务器套接字的状态?

来自分类Dev

如何正常关闭异步服务器套接字?C#

来自分类Dev

如何使用C#窗口发现侦听端口XX的服务器套接字的IP地址

来自分类Dev

在服务器套接字C#中获取有关客户端的数据

来自分类Dev

C#服务器发送字节

来自分类Dev

PHP客户端套接字与C#套接字服务器的连接

来自分类Dev

通过c#.net Core中的套接字连接以消息形式发送图QL查询

来自分类Dev

异步客户端套接字c#。如何在不阻止程序运行的情况下循环等待来自服务器的信息?

来自分类Dev

在没有SMTP服务器的情况下使用C#发送电子邮件?

来自分类Dev

在没有SMTP服务器的情况下使用C#发送电子邮件?

来自分类Dev

如何在C#中通过套接字发送文件

来自分类Dev

C#套接字如何知道何时发送某些数据

来自分类Dev

如何在Play 2服务器和C#应用程序之间建立套接字连接?

来自分类Dev

具有C#驱动程序2.0的MongoDB(服务器v 2.6.7):如何从InsertOneAsync获取结果

来自分类Dev

COM服务器如何在具有不同ComInterfaceType枚举的C#类库中封送可空值?

来自分类Dev

C#所有套接字关闭

来自分类Dev

C#所有套接字关闭

来自分类Dev

通过套接字将数据从浏览器发送到C#/ Java

来自分类Dev

通过套接字将数据从浏览器发送到C#/ Java

来自分类Dev

.NET C#套接字在两个不同的线程上发送

来自分类Dev

C ++-套接字服务器线程

来自分类Dev

C#简单HTTP服务器未将响应发送到浏览器

来自分类Dev

如何在C中通过TCP套接字通过HTTP发送文件?

来自分类Dev

如何在C中通过TCP套接字通过HTTP发送文件?

来自分类Dev

使用C中的套接字将命令发送到FTP服务器

Related 相关文章

  1. 1

    将带有套接字的大文件发送到服务器C#

  2. 2

    使用套接字C#客户端/服务器发送文件

  3. 3

    在C#中使用.net UDP套接字发送字节

  4. 4

    C#构建Web套接字服务器

  5. 5

    有没有办法在 C# 中检查服务器套接字的状态?

  6. 6

    如何正常关闭异步服务器套接字?C#

  7. 7

    如何使用C#窗口发现侦听端口XX的服务器套接字的IP地址

  8. 8

    在服务器套接字C#中获取有关客户端的数据

  9. 9

    C#服务器发送字节

  10. 10

    PHP客户端套接字与C#套接字服务器的连接

  11. 11

    通过c#.net Core中的套接字连接以消息形式发送图QL查询

  12. 12

    异步客户端套接字c#。如何在不阻止程序运行的情况下循环等待来自服务器的信息?

  13. 13

    在没有SMTP服务器的情况下使用C#发送电子邮件?

  14. 14

    在没有SMTP服务器的情况下使用C#发送电子邮件?

  15. 15

    如何在C#中通过套接字发送文件

  16. 16

    C#套接字如何知道何时发送某些数据

  17. 17

    如何在Play 2服务器和C#应用程序之间建立套接字连接?

  18. 18

    具有C#驱动程序2.0的MongoDB(服务器v 2.6.7):如何从InsertOneAsync获取结果

  19. 19

    COM服务器如何在具有不同ComInterfaceType枚举的C#类库中封送可空值?

  20. 20

    C#所有套接字关闭

  21. 21

    C#所有套接字关闭

  22. 22

    通过套接字将数据从浏览器发送到C#/ Java

  23. 23

    通过套接字将数据从浏览器发送到C#/ Java

  24. 24

    .NET C#套接字在两个不同的线程上发送

  25. 25

    C ++-套接字服务器线程

  26. 26

    C#简单HTTP服务器未将响应发送到浏览器

  27. 27

    如何在C中通过TCP套接字通过HTTP发送文件?

  28. 28

    如何在C中通过TCP套接字通过HTTP发送文件?

  29. 29

    使用C中的套接字将命令发送到FTP服务器

热门标签

归档