Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Asynchronous - Fatal编程技术网

C# 异步服务器套接字的行为非常奇怪

C# 异步服务器套接字的行为非常奇怪,c#,sockets,asynchronous,C#,Sockets,Asynchronous,我正在进行一个简单的代理服务器调试。一切似乎都很正常,除了70%的请求得到了实际处理,其余的我得到了奇怪的数据 我有3个功能: private static void Listen(Object obj) { log("**** Listen()"); TcpListener listener = (TcpListener)obj; try { while (true)

我正在进行一个简单的代理服务器调试。一切似乎都很正常,除了70%的请求得到了实际处理,其余的我得到了奇怪的数据

我有3个功能:

    private static void Listen(Object obj)
    {
        log("**** Listen()");
        TcpListener listener = (TcpListener)obj;
        try
        {
            while (true)
            {
                TcpClient client = listener.AcceptTcpClient();
                while (!ThreadPool.QueueUserWorkItem(new WaitCallback(ProxyServer2.ProcessClient), client)) ;
            }
        }
        catch (ThreadAbortException) { MessageBox.Show("ABORT EX"); }
        catch (SocketException) { MessageBox.Show("SOCKET EX"); }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }
    }

    private static void ProcessClient(Object obj)
    {

        log("**** ProcessClient");
        TcpClient client = (TcpClient)obj;
        try
        {
            DoHttpProcessing(client);
        }
        catch (Exception ex)
        {
            log(ex.Message);
        }
        finally
        {
            client.Close();
        }
    }

    private static void DoHttpProcessing(TcpClient client)
    {
        log("**** DoHttpProcessing");
        // handle all the http stuff
    }
这就是奇怪的部分开始的地方。当我通过代理发出请求时,请求被执行并返回,当我第二次这样做时,我从上一个请求返回最后10-30字节

最奇怪的是,当我获取这些垃圾字节时,DoHttpProcessing没有被触发(这没有意义,因为它包含将响应发送回浏览器的流)。有东西正在发回垃圾数据。。但是什么呢?

浏览器似乎试图使用相同的旧连接获取新请求?这可能吗


触发DoHttpProcessing后,所有流都将关闭,所以我不明白服务器如何使用旧连接并获取此垃圾数据

您的服务器不是异步的。它是螺纹的。问题出在
DoHttpProcessing
代码中。你知道HTTP 1.1可以在同一个套接字上发送多个请求吗?一个HTTP 1.1请求可能会产生多个响应片段吗?谢谢,我不知道这些。这是否意味着我的线程设置将不适用于HTTP 1.1,我需要采用不同的方法?