日期:2014-05-17  浏览次数:21041 次

HttpWebRequest.GetResponse()取不到内容
服务端是C++,客户端是C#,服务端在8888端口监听,C#用以下代码获取响应:
HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create("http://192.168.20.160:8888/cpe");
HttpWebResponse httpRes = (HttpWebResponse)httpReq.GetResponse();
if (httpRes.StatusCode == HttpStatusCode.OK)
{
    Console.WriteLine("GET:{0}", httpRes.Headers);
}
httpRes.Close();
现在通过wireshark抓包看到,服务端发送了200 OK的回应包,但是C#这边总是在httpReq.GetResponse()这句出问题:
1. 提示连接被意外关闭(C++服务端发送完200 OK后会close socket),并且还会再发GET请求;
2. 如果把C++的close socket注释掉,就会提示连接超时。

这两种情况下都打不出httpRes.Headers,请问这到底是哪里的问题?还是我用的不对?请指教,谢谢。

------解决方案--------------------
连到192.168.20.160:8888

再发送GET的包对应的字符串
------解决方案--------------------
HttpWebRequest的原理应该和IE一样的,都是微软的产品,核心自然是同一个。如果IE都不行,看来C++那边发送的时候并未完全遵循http协议,只是模仿http协议,那么用完全遵循http协议的HttpWebRequest请求就通不过了。