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