异步服务器套接字的表现非常奇怪

时间:2012-02-26 17:58:07

标签: c# sockets asynchronous

我正在研究一个简单的调试代理服务器。一切似乎工作正常,除了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后,所有流都关闭了,所以我不明白服务器如何使用旧连接并获取这些垃圾数据!?!

0 个答案:

没有答案