导读:
一.概述: 本文通过一个实例向大家介绍用Visual C#进行Internet通讯编程的一些基本知识。我们知道.Net类包含了请求/响应层、应用协议层、传输层等层次。在本程序中,我们运用了位于请求/响应层的WebRequest类以及WebClient类等来实现高抽象程度的Internet通讯服务。本程序的功能是完成网络文件的下载。
二.实现原理: 程序实现的原理比较简单,主要用到了WebClient类和FileStream类。其中WebClient类处于System.Net名字空间中,该类的主要功能是提供向URI标识的资源发送数据和从URI标识的资源接收数据的公共方法。我们利用其中的DownloadFile()方法将网络文件下载到本地。然后用FileStream类的实例对象以数据流的方式将文件数据写入本地文件。这样就完成了网络文件的下载。
三.实现步骤: 首先,打开Visual Studio.Net,新建一个Visual C# Windows应用程序的工程,不妨命名为"MyGetCar"。
接着,布置主界面。我们先往主窗体上添加如下控件:两个标签控件、两个文本框控件、一个按钮控件以及一个状态栏控件。最终的主窗体如下图所示:
完成主窗体的设计,我们接着完成代码的编写。
在理解了基本原理的基础上去完成代码的编写是相当容易。程序中我们主要用到的是WebClient类,不过在我们调用WebClient类的实例对象前,我们需要用WebRequest类的对象发出对统一资源标识符(URI)的请求。
try
{
WebRequest myre=WebRequest.Create(URLAddress);
}
catch(WebException exp)
{
MessageBox.Show(exp.Message,"Error");
}
这是一个try-catch语句,try块完成向URI的请求,catch块则捕捉可能的异常并显示异常信息。其中的URLAddress为被请求的网络主机名。
在请求成功后,我们就可以运用WebClient类的实例对象中的DownloadFile()方法实现文件的下载了。其函数原型如下:
public void DownloadFile( string address, string fileName);
其中,参数address为从中下载数据的 URI,fileName为要接收数据的本地文件的名称。
之后我们用OpenRead()方法来打开一个可读的流,该流完成从具有指定URI的资源下载数据的功能。其函数原型如下:
ublic Stream OpenRead(string address);
其中,参数address同上。
最后就是新建一个StreamReader对象从中读取文件的数据,并运用一个while循环体不断读取数据,只到读完所有的数据。
还有在使用以上方法时,你将可能需要处理以下几种异常:
WebException:下载数据时发生错误。
UriFormatException:通过组合 BaseAddress、address 和 QueryString 所构成的 URI 无效。
这部分的代码如下:(client为WebClient对象,在本类的开头处声明即可)
statusBar.Text = "开始下载文件...";
client.DownloadFile(URLAddress,fileName);
Stream str = client.OpenRead(URLAddress);
StreamReader reader = new StreamReader(str);
byte[] mbyte = new byte[100000];
int allmybyte = (int)mbyte.Length;
int startmbyte = 0;
statusBar.Text = "正在接收数据...";
while(allmybyte>0)
{
int m = str.Read(mbyte,startmbyte,allmybyte);
if(m==0)
break;
startmbyte+=m;
allmybyte-=m;
}
完成了文件数据的读取工作后,我们运用FileStream类的实例对象将这些数据写入本地文件中:
FileStream fstr = new FileStream(Path,FileMode.OpenOrCreate,FileAccess.Write);
fstr.Write(mbyte,0,startmbyte);
这样,程序主体部分的代码已经完成了,不过要完成全部程序还需要一些工作。由于在程序接收网络文件数据的时候运用到了while循环体,这样会很占程序资源,表现的形式就是主窗体不能自由移动。为了解决这个问题,我们在程序中用到了多线程机制。我们在响应按钮的事件中新建一个线程,该线程就是用来实现网络文件下载功能的。如此,文件下载的线程和程序主线程并存,共享进程资源,使得程序顺畅运行。这样,我们在按钮控件的消息响应函数里添加如下代码:
Thread th = new Thread(new ThreadStart(StartDownload));
th.Start();
该线程的实现函数就是StartDownload(),而上面介绍的那些代码就是这个函数的主体部分。
最后,因为程序中运用到了WebRequest、WebClient、FileStream、Thread等类,所以最重要的就是在程序的开始处添加如下名字空间:
using System.Net;
using System.IO;
using System.Threading;
下面就是程序的源代码:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Net;
using System.IO;
using System.Threading;
namespace MyGetCar
{
///
/// Form1 的摘要说明。
///
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox srcAddress;
private System.Windows.Forms.TextBox tarAddress;
private System.Windows.Forms.StatusBar statusBar;
private System.Windows.Forms.Button Start;
private WebClient client = new WebClient();
///
/// 必需的设计器变量。
///
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
///
/// 清理所有正在使用的资源。
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.srcAddress = new System.Windows.Forms.TextBox();
this.tarAddress = new System.Windows.Forms.TextBox();
this.statusBar = new System.Windows.Forms.StatusBar();
this.Start = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// label1
//
this.label1.Location = new System.Drawing.Point(8, 32);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(72, 23);
this.label1.TabIndex = 0;
this.label1.Text = "文件地址:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label2
//
this.label2.Location = new System.Drawing.Point(8, 72);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(72, 23);
this.label2.TabIndex = 1;
this.label2.Text = "另存到:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// srcAddress
//
this.srcAddress.Location = new System.Drawing.Point(80, 32);
this.srcAddress.Name = "srcAddress";
this.srcAddress.Size = new System.Drawing.Size(216, 21);
this.srcAddress.TabIndex = 2;
this.srcAddress.Text = "";
//
// tarAddress
//
this.tarAddress.Location = new System.Drawing.Point(80, 72);
this.tarAddress.Name = "tarAddress";
this.tarAddress.Size = new System.Drawing.Size(216, 21);
this.tarAddress.TabIndex = 3;
this.tarAddress.Text = "";
//
// statusBar
//
this.statusBar.Location = new System.Drawing.Point(0, 151);
this.statusBar.Name = "statusBar";
this.statusBar.Size = new System.Drawing.Size(312, 22);
this.statusBar.TabIndex = 4;
//
// Start
//
this.Start.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.Start.Location = new System.Drawi
本文转自
http://study.qqcf.com/web/224/24011.htm
分享到:
相关推荐
### 使用 Visual C# 实现文件下载功能的知识点详解 #### 一、概述 在现代软件开发中,网络通信是一项非常重要的技术。对于.NET框架下的开发人员来说,掌握如何使用C#进行Internet通信是非常必要的技能之一。本文档...
C#实现IIS服务器下载文件 本文将详细介绍如何使用C#语言实现IIS服务器下载文件的功能。通过使用WebClient类和FileStream类,可以实现高抽象程度的Internet通讯服务,并将网络文件下载到本地。 一、概述 本文通过...
在这个场景中,我们关注的是一个使用Visual C#实现的文件分割合并器。Visual C#是微软公司开发的一种面向对象的编程语言,它以其强大、高效和易用性被广泛应用于Windows平台的软件开发。 首先,让我们理解文件分割...
《Visual C# 2005从入门到精通》是一本专为初学者设计的编程教程,旨在帮助读者全面掌握Microsoft的C#编程语言及其在Visual Studio 2005环境下的应用。这本书覆盖了从基础语法到高级特性的全方位学习路径,确保读者...
通过《Visual C# 2008程序设计经典案例设计与实现》这本书,读者不仅可以学习到C#语言的基本语法和.NET Framework的功能,还能通过实际案例锻炼编程技能,提升解决问题的能力。书中的源代码将帮助读者更直观地理解...
《Visual C# 2008程序设计经典案例设计与实现》是一本专注于利用Microsoft的C#编程语言在Visual Studio 2008环境下进行软件开发的实践指南。这本书涵盖了从基础到高级的各种主题,旨在帮助读者提升C#编程技能,并...
通过WinForm调用FluentFTP库,实现FTP客户端,具体可参考本人博客【C# 利用FluentFTP实现FTP上传下载功能】 开发工具:VisualStudio2022 开发语言:C# 开发框架:.Net Framework4.8及以上
【标题】"8 Visual C#.NET" 涵盖了微软开发环境下的C#编程语言,专注于使用Visual Studio工具进行应用程序开发。Visual C#是.NET框架的重要组成部分,它为开发者提供了一个高效、现代化的编程环境,用于构建各种类型...
《 Beginning Visual C# 2010 Programming code》是一本专为C#初学者设计的入门教程,旨在帮助读者快速掌握C#编程的基础知识。书中的代码实例是学习过程中的重要辅助工具,提供了实践和理解理论知识的平台。C#是一种...
以上是使用C#实现截屏功能的基本步骤。实际项目中可能需要考虑更多细节,如多显示器支持、自定义截取区域、剪贴板集成等。通过理解这些概念,并结合提供的"ScreenCutter"源代码,你可以创建一个功能完善的截屏工具,...
而"DrawImageNetC.cs"可能是用纯C#实现的图像处理逻辑,对比使用插件的方式,可能会在性能或灵活性上有所不同。 C#图像处理的一些常见操作包括: 1. **读取和写入图像**:使用Image类的FromFile方法加载图像,Save...
总之,这个教程将带你深入XML Web服务的世界,通过Visual Basic .NET和Visual C#.NET,你可以构建出强大的分布式应用程序,实现跨平台、跨网络的通信。结合MCAD-MCSD的认证学习路径,这将极大地提升你的.NET开发技能...
3. **Visual C#实现Web代理服务**: - 代理服务器首先监听指定端口,等待客户端的HTTP请求。 - 收到请求后,解析出目标Web服务器的地址,创建Socket实例连接到该服务器。 - 通过Socket发送客户端的HTTP请求数据到...
在使用Visual C#与ASP.NET结合开发时,你需要安装Visual Studio IDE,这是一个功能强大的集成开发环境,专门为.NET开发量身定制。Visual Studio提供了内置的C#支持,以及用于创建ASP.NET项目的模板。一旦你创建了一...
总结来说,使用Visual C#实现P2P应用程序的关键在于理解P2P的基本原理,以及有效地利用.NET框架提供的网络编程工具,如TcpListener和TcpClient,来构建能够监听、接收和发送数据的网络通信机制。这种实现方式可以...
《Visual C# 2005动态网站开发技术与实践》一书主要涵盖了使用Microsoft的Visual C# 2005进行动态网站开发的核心技术和实践经验。这本书旨在帮助开发者理解和掌握如何利用C#语言构建功能丰富的、高性能的Web应用程序...
在实现阶段,使用Visual C#编写代码来创建组件,并利用.NET Framework的类库来实现所需功能。测试阶段,要确保组件在各种场景下都能正常工作,这通常涉及单元测试和集成测试。最后,部署组件到目标环境中,可以是...
总的来说,创建一个C#实现的Windows文件资源管理器需要对C#语法、.NET Framework以及文件系统操作有深入的理解。通过这个项目,开发者不仅可以提升编程技能,还能更好地掌握GUI应用的开发流程。