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