在http://book.mop.com/moplz/user/chapter_275215,7.html这个页面中,如果用WebResponse来获取内容,会发现内容不全,请教如何才能获取该页面的全部内容?谢谢!

解决方案 »

  1.   

    //"开始"按钮事件 
    private void button1_Click(object sender, System.EventArgs e) { 
    //取得预保存的文件名 
    string fileName=textBox3.Text.Trim(); 
    //远程主机 
    string hostName=textBox1.Text.Trim(); 
    //端口 
    int port=Int32.Parse(textBox2.Text.Trim()); 
    //得到主机信息 
    IPHostEntry ipInfo=Dns.GetHostByName(hostName); 
    //取得IPAddress[] 
    IPAddress[] ipAddr=ipInfo.AddressList; 
    //得到ip 
    IPAddress ip=ipAddr[0]; 
    //组合出远程终结点 
    IPEndPoint hostEP=new IPEndPoint(ip,port); 
    //创建Socket 实例 
    Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); 
    try 

    //尝试连接 
    socket.Connect(hostEP); 

    catch(Exception se) 

    MessageBox.Show("连接错误"+se.Message,"提示信息 
    ,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information); 

    //发送给远程主机的请求内容串 
    string sendStr="GET / HTTP/1.1\r\nHost: " + hostName + 
    "\r\nConnection: Close\r\n\r\n"; 
    //创建bytes字节数组以转换发送串 
    byte[] bytesSendStr=new byte[1024]; 
    //将发送内容字符串转换成字节byte数组 
    bytesSendStr=Encoding.ASCII.GetBytes(sendStr); 
    try 

    //向主机发送请求 
    socket.Send(bytesSendStr,bytesSendStr.Length,0); 

    catch(Exception ce) 

    MessageBox.Show("发送错误:"+ce.Message,"提示信息 
    ,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information); 

    //声明接收返回内容的字符串 
    string recvStr=""; 
    //声明字节数组,一次接收数据的长度为1024字节 
    byte[] recvBytes=new byte[1024]; 
    //返回实际接收内容的字节数 
    int bytes=0; 
    //循环读取,直到接收完所有数据 
    while(true) 

    bytes=socket.Receive(recvBytes,recvBytes.Length,0); 
    //读取完成后退出循环 
    if(bytes〈=0) 
    break; 
    //将读取的字节数转换为字符串 
    recvStr+=Encoding.ASCII.GetString(recvBytes,0,bytes); 

    //将所读取的字符串转换为字节数组 
    byte[] content=Encoding.ASCII.GetBytes(recvStr); 
    try 

    //创建文件流对象实例 
    FileStream fs=new FileStream(fileName,FileMode.OpenOrCreate,FileAccess.ReadWrite); 
    //写入文件 
    fs.Write(content,0,content.Length); 

    catch(Exception fe) 

    MessageBox.Show("文件创建/写入错误:"+fe.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information); 

    //禁用Socket 
    socket.Shutdown(SocketShutdown.Both); 
    //关闭Socket 
    socket.Close(); 

      

  2.   

    谢谢liuchao305() ,虽然您的这个答案没有解决我的这个问题,但是也很值得我学习学习!我用WebResponse能够取到网页的内容,但是内容不全!