C# 网络编程之网页简单下载实现

       这是根据《C#网络编程实例教程》中学到的知识实现的一个C#网页简单下载器,其中涉及到的知识主要是HTTP协议编程中相关类:HttpWebRequest类、HttpWebResponse类、WebRequest类、WebResponse类、Uri类、WebClient类。通过它们相应的方法实现,这里涉及到了4个新接触的知识点我想重点讲述:
      (1).ComboBox控件:这是一个下拉列表的可编辑的文本框,右键该控件在显示的"编辑项"中添加网址,可见实例中的下拉控件;
      (2).saveFileDialog控件:这是一个保存文件位置对话框,通过该控件可以保存文本文件在自定义位置,还有一个相对应的打开控件OpenFileDialog;
      (3).HttpWebResponse类属性:该类常用属性如下:每个类都有相应的属性,这里只详细说明HttpWebResponse类的属性:

      在下列实例中我使用的是HttpWebResponse response.ContentLength获取应答内容长度。
      (4).try..catch..finally:用于处理异常情况,try块中使用引发异常语句,try块中发生异常后跳转到catch异常处理程序,catch用于异常处理程序,即使引发异常,finally块中的代码也会执行,从程序中释放资源。

一.界面设计

      添加saveFileDialog控件,该控件的Filter(文件筛选器)属性设置为"Web文件|*.htm"
      添加一个ComboBox控件设置Text属性为“http://www.baidu.com”,右键该控件Items属性添加如下几条网址:

二.源代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

//添加命名空间
using System.Net;
using System.IO;

namespace Http_Web_Request
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //双击"开始下载"添加Click事件
        private void button1_Click(object sender, EventArgs e)
        {
            string uri = comboBox1.Text;

            //HttpWebRequest对象实例:该类用于获取和操作HTTP请求 创建WebRequest对象
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);     

            //HttpWebResponse对象实例:该类用于获取和操作HTTP应答
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();   //获取答复

            //构造数据流、文件流对象实例
            Stream stream = null;
            FileStream filestream = null;

            try
            {
                //获取应答流赋值
                stream = response.GetResponseStream();    
                //确定应答内容的大小
                long size = response.ContentLength;       
                //定义"另存为对话框"文件类型
                saveFileDialog1.Filter = "网页文件(*.htm)|*.htm|ASP.NET文件(*.aspx)|*.aspx";

                //打开保存对话框 点击"确定"按钮执行
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    //为文件流对象实例赋值
                    filestream = new FileStream(saveFileDialog1.FileName, FileMode.OpenOrCreate, FileAccess.Write);
                    int length = 1024;
                    byte[] Num = new byte[1025];       //构造字组
                    int i = 0;

                    while ((i = stream.Read(Num, 0, length)) > 0)  //流不为空写流
                    {
                        filestream.Write(Num, 0, i);               //写流
                    }
                }
            }
            catch (Exception msg)
            {
                MessageBox.Show(msg.Message);         //异常处理
            }
            finally
            {
                stream.Close();                       //关闭流
                filestream.Close();
            }
        }

    }
}

三.运行结果

      运行程序在“下拉”菜单中选择“百度”,点击“开始下载”后弹出的保存对话框中选择下载地址自定义命名保存,如下图所示:

      保存后显示下载后的静态网址如下图所示:

      同时也在保存有的静态网页时会产生乱码,如csdn网站,它下载的内容不像我们说看到的正常形式保存的。

四.总结

      通过这个例子关于Http网络编程知识我想主要表达saveFileDialog控件的使用、ComboBox下拉控件的使用、类中常用的属性的熟悉及了解、try.catch.finally语法的应用,感谢我看的书籍作者、一些博客及自己,这篇文章加深了我自己对相关知识的了解,同时也希望帮助大家!有错误或不足之处见谅!
    (By:Eastmount 7-30-下午4点   http://blog.csdn.net/eastmount/

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
实现一个 Windows 网络编程浏览器的设计与实现需要考虑多个方面,包括用户界面设计、网络协议支持、Web 引擎设计、安全性设计和其他功能设计等。以下是一个简单的基于 C# 的代码示例,用于实现一个简单网络编程浏览器: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Windows.Forms; namespace SimpleWebBrowser { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnGo_Click(object sender, EventArgs e) { string url = txtUrl.Text.Trim(); if (url.StartsWith("http://")) { url = url.Substring(7); } else if (url.StartsWith("https://")) { url = url.Substring(8); } int pos = url.IndexOf("/"); string host = url.Substring(0, pos); string path = url.Substring(pos); // 使用 Socket 进行网络通信 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(host, 80); // 发送 HTTP 请求 string request = string.Format("GET {0} HTTP/1.1\r\n", path) + string.Format("Host: {0}\r\n", host) + "Connection: Close\r\n\r\n"; byte[] requestData = Encoding.ASCII.GetBytes(request); socket.Send(requestData); // 接收 HTTP 响应 byte[] buffer = new byte[1024]; int bytesRead = 0; StringBuilder sb = new StringBuilder(); do { bytesRead = socket.Receive(buffer); sb.Append(Encoding.ASCII.GetString(buffer, 0, bytesRead)); } while (bytesRead > 0); // 显示网页内容 txtHtml.Text = sb.ToString(); // 关闭 Socket 连接 socket.Shutdown(SocketShutdown.Both); socket.Close(); } } } ``` 这段代码实现了一个简单的 Windows 网络编程浏览器。它使用 Socket 进行网络通信,发送 HTTP 请求并接收 HTTP 响应。在接收到响应后,它将响应内容显示在一个文本框中。这个例子中,我们使用了 C# 的 Windows Forms 进行用户界面设计,并在按钮单击事件中处理 HTTP 请求和响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eastmount

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值