1、网络编程基础
、.Sockets和.Mail这三个命名空间提供了网络编程中用到的多数类,下面对这三个命名空间及他们包含的主要类进行详细讲解。
(1)命名空间
命名空间为当前网络上使用的多种协议提供了简单的编程接口,而他所包含的WebRequest类和WebResponse类形成了所谓可插接式协议的基础,可插接式洗衣是网络服务的一种实现,它是用户能够开发出使用Internet资源的应用程序,而不必考虑各种不同协议的具体细节。
I.DNS类
DNS类(静态类)提供简单的域名解析功能,他从Internet域名系统(DNS)检索关于特定主机的信息。通常在IPHostEntey类的实例中返回来自DNS查询的主机信息。DNS类中的常用方法:
GetHostAddresses:返回指定主机的Internet协议(IP)地址。
GetHostByAddress:获取IP地址的DNS主机信息。
GetHostByName:获取指定DNS主机名的DNS信息。
GetHostEntry:将主机名或IP地址解析为IPHostEntry实例。
GetHostName:获取本地计算机的主机名。
注意:通常在IPHostEntry类的实例中返回来自DNS查询的主机信息,如果指定的主机在DNS数据库中有多个入口,则IPHostEntry包含多个IP地址和别名。
示例程序:
创建windows窗口程序
public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){if (textBox1.Text == string.Empty){MessageBox.Show("主机地址中不可为空");}else{textBox2.Text = string.Empty;IPAddress[] ips = Dns.GetHostAddresses(textBox1.Text);//获取指定主机的IP地址foreach (IPAddress ip in ips){textBox2.Text = ip.ToString();}textBox3.Text = Dns.GetHostName();//获取本机名textBox4.Text = Dns.GetHostByName(Dns.GetHostName()).HostName;}}}
II.IPAddress类
IPAddress类包含计算机在IP网络上的地址,它主要用来提供网际协议(IP)地址。IPAddress类的常用字段、属性、方法和说明:
Any字段:提供一个IP地址,指示服务器应该侦听所有网络接口上的客户端活动。此字段为只读。
Address属性:网际协议(IP)地址。
AddressFamily属性:获取 IP地址的地址表。
GetAddressBytes方法:以字节数组形式提供IPAddress的副本。
Parse方法:将IP地址字符串转换成IPAddress的副本。
TryParse方法:确定字符串是否为有效的IP地址。
注意:通常情况下,IPHostEntry类作为Helper类和DNS类一起使用。
示例程序:
public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){label1.Text = string.Empty;//获得主机的IP地址IPAddress[] ips = Dns.GetHostAddresses(textBox1.Text);foreach (IPAddress ip in ips){label1.Text = "网际协议地址:" + ip.Address + "\nIP地址的地址族:" +ip.AddressFamily.ToString() + "\n是否IPV6连接本地址:" + ip.IsIPv6LinkLocal;}}}
III.IPEndPoint类
IPEndPoint类包含应用程序连接到主机上的服务所需的主机和本地或远程端口信息。通过组合服务的主机IP地址和端口号,IPEndPoint类形成到服务的连接点,它主要用来将网络端点表示为IP地址和端口号。IPEndPoint类的常用字段、属性以及说明如下:
MaxPort字段:指定可以分配给Port属性的最大值。MaxPort值设置为0x0000FFF。此字段为只读。
MinPort字段:指定可分配给Port属性的最小值。此字段为只读。
Address属性:获取或设置终结点的IP地址。
AddressFamily属性:获取网际协议(IP)地址族。
Port属性:获取或者设置终结点的端口号。
注意:在设置端口号的时候,其值必须大于等于0或小于等于0x00000000FFFFFFFF。
示例程序:
返回ip地址和端口号
public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(textBox1.Text),80);label1.Text = "IP地址: " + ipep.Address.ToString() + "\n端口号: " + ipep.Port;}}
IV.WebClient类
WebClient类提供向URI标识的任何本地、Intranet或Internet资源发送数据以及从这些资源接收数据的公共方法。WebClient类中的常用属性和方法如下:
URI简介
BaseAddress属性:获取或设置WebClient类发出请求的基URI。
Encoding属性:获取或设置用于上传和下载字符串的Encoding。
Headers属性:获取或设置和请求关联的标头名称/直对集合。
QueryString属性:获取或者设置和请求关联的查询名称/值对集合。
ResponseHeaders属性:获取或设置和请求关联的查询名称/值对合集。
DownloadData方法:以Byte数组形式通过指定的URI下载。
DownloadFile方法:将具有指定URI的资源下载到本地文件。
DownloadString方法:以String或URI形式下载到本地文件。
OpenRead方法:为从具有指定URI的资源下载的数据打开一个可读的流。
OpenWrite方法:打开一个流以将数据写入具有指定URI的资源。
UploadData方法:将数据缓冲区上载到具有制定URI的资源。
UploadFile方法:将本地文件上载到具有指定URI的资源。
UploadString方法:将指定的字符串上载到指定的资源。
UploadValues方法:将名称/值集合上载到具有制定URI的资源。
注意:默认情况下,WebClient实例不发送可选的HTTP报头,则必须将该报头添加到Headers集合中。
headers
public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){richTextBox1.Text = string.Empty;//实例化WebClient类对象WebClient w = new WebClient();//设置w的基URIw.BaseAddress = textBox1.Text;//指定下载字符串的编码方式。w.Encoding = Encoding.UTF8;//为WebClient类对象添加标头。w.Headers.Add("Content-type","application/x-www-form-urlencoded");Stream stream = w.OpenRead(textBox1.Text);//使用流声明一个流读取变量StreamReader sreader = new StreamReader(stream);string s = string.Empty;while ((s = sreader.ReadLine()) != null){richTextBox1.Text += s + '\n';}//调用WebClient对象的DownLoadFile方法将指定网站的内容保存到文件中。w.DownloadFile(textBox1.Text,DateTime.Now.ToFileTime()+".txt");MessageBox.Show("successed!!");}}
注意:这个程序会将网页的构成(HTML语言)保存到一个txt文件中,在程序的源目录的bin文件夹下的Debug中就会发现有新创建的文件。
DownloadFile
V.WebRequest类和WebResponse类
WebRequest类是.NET的请求/响应模式的抽象基类,用于访问Internet数据。使用该请求/响应模型的应用程序可以用协议不可知的方式从Internet请求数据,在这种方式下,应用程序处理WebRequest类的实例,而协议特定的子类则执行请求的具体细节。
WebResponse类也是抽象类,应用程序可以使用WebResponse类的实例以协议不可知的方式参与请求和响应事务,而从WebResponse类派生的协议类携带请求的详细信息。
WebRequest类的常用属性、方法、说明:
ContentLength属性:当在子类中被重写的时候,获取或设置所发送的请求数据的内容长度。
ContentType属性:当在子类中被重写的时候,获取或设置所发送的请求数据的内容类型。
Headers:当在子类中被重写的时候,获取或设置和请求关联的标头名称/值对的集合。
Method属性:当在子类中被重写的时候,获取或设置在此请求中使用的协议方法。
RequestUri属性:当在子类中被重写时,获取或请求关联的Internet资源的URI。
TimeOut属性:获取或设置请求超时前的时间长度。
About方法 :终止请求。
Create方法:初始化新的WebRequest。
GetResponse方法:当在子类中被重写的时候,返回对Internet请求的响应。
WebResponse类的属性、方法、说明:
ContentLength属性:当在子类中重写时,获取或设置接收的数据的内容长度。
ContentType属性:当在派生类中重写时,获取或设置接受数据的内容类型。
Headers属性:当在派生类中重写时,获取与此请求关联的标头名称/值对的集合。
ResponseUri属性:当在派生类中重写时,获取实际相应此请求的Internet资源的URI。
Close方法:当由子类重写时,将关闭响应流。
GetResponseStream方法:当在子类中重写时,从Internet资源返回数据流。
示例程序:
public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){richTextBox1.Text = string.Empty;//实例化一个WebRequest对象WebRequest w = WebRequest.Create(textBox1.Text);//设置用于对Internet资源请求进行身份验证的网络凭据。w.Credentials=CredentialCache.DefaultCredentials;//调用WebRequest对象的各种属性获取WebRequest请求的相关信息。richTextBox1.Text = "请求数据的内容长度: " + w.ContentLength;richTextBox1.Text += "\n该请求的协议方法:" + w.Method;richTextBox1.Text += "\n访问网络代理:" + w.Proxy;richTextBox1.Text += "\n与该请求关联的URI:" + w.RequestUri;richTextBox1.Text += "\n超时时间:" + w.Timeout;//调用GetResponse方法来实例化一个 WebResponseWebResponse wr = w.GetResponse();richTextBox1.Text = "\n响应该请求的URI: " + wr.ResponseUri;//调用GetResponseStream方法返回数据流。Stream stream = wr.GetResponseStream();StreamReader sreader = new StreamReader(stream);richTextBox1.Text += "\n" + sreader.ReadToEnd();//读取流中的内容直至尽头。sreader.Close();stream.Close();wr.Close();}}