目前状况:有一服务器通过HTTP服务向外发送实时服务器状态,如果用IE可以很好的观察到服务器状态。    现在有需求要求改写成一个windows应用程序(服务器端不能动)。我使用抓包程序观察了一下,IE发送一个get请求后,服务器就不停的将状态返回,同时客户端没有在次发送其它请求。我想使用HttpWebRequest 和HttpWebResponse来模拟这个过程,程序如下。程序在req1.GetResponse(); 阻止了9秒后返回,但返回值只有服务器发的4个状态,同时观察服务器还在向客户端发送数据,并显示客户端已接收,客户端采用抓包程序也可看到服务器传送来的数据已接收。但由于GetResponse已返回,不能得到后续包。
    另外,GetResponse是接收完所有数据后返回,但现在这种情况服务器始终发送数据,没有完的时候。而且接收的数据要求及时处理并显示,不知道该怎么办才好。
    那位给指点一二!
        private void httpGet(string URI, CookieContainer cc) 
        { 
            HttpWebRequest req1 = (HttpWebRequest)WebRequest.Create(URI); 
            req1.Method = "GET"; 
            req1.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"; 
            req1.Headers["Accept-Language"] = "zh-cn"; 
            req1.Headers["Accept-Encoding"] = "gzip, deflate"; 
            req1.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon;  EmbeddedWB 14.52; baiduds; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; 
            req1.KeepAlive = true; 
            req1.CookieContainer = cc;             resp1 = (HttpWebResponse)req1.GetResponse(); 
            cc.Add(resp1.Cookies); 
            StreamReader sr1 = new StreamReader(resp1.GetResponseStream(), Encoding.Default); 
        } 

解决方案 »

  1.   

    搞了半天,看来是没办法了,另外这个类有问题,多线程的时候会用同一个端口发送请求,决定自己从写HttpWebRequest 和HttpWebResponse这两个类。
      

  2.   

    关注+学习!
    我一般是这样做的:var xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");   
    xmlhttp.open("Post","http://localhost/test/save.asp",   false);   
    xmlhttp.setRequestHeader("Content-Type","text/XML")   
    xmlhttp.setRequestHeader("Content-Type","gb2312")   
    xmlhttp.send(xmlDoc);
    //服务器端接受
    save.asp:
      <%@Language="JAVASCRIPT"%>
      
      <% 
      Response.Expires=-1000;   
    var doc=Server.CreateObject("MsXML2.DOMDocument"); doc.load(Request);   
    doc.save(Server.MapPath("save.xml"));  
    %>   不过我这个方法总觉得不是很好,只是客户端到服务器端交互,而不能在从服务器端返回到客户端,如果实现了就好了!
    这应该就要Ajax处理更好点!
      

  3.   

    自己使用SOCKET类解决该问题,因为交互的东西不多,只需要发送二次数据,然后接收即可。