C#成魔之路<13> 网络编程技术(1)System.Net命名空间

原创 2016年03月11日 12:02:25

1、网络编程基础
System.Net、System.Net.Sockets和System.Net.Mail这三个命名空间提供了网络编程中用到的多数类,下面对这三个命名空间及他们包含的主要类进行详细讲解。

(1)System.Net命名空间
System.Net命名空间为当前网络上使用的多种协议提供了简单的编程接口,而他所包含的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的基URI
            w.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方法来实例化一个 WebResponse
            WebResponse 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();
        }
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C#成魔之路<14> 网络编程技术(3 )System.Net.Mail命名空间

System.Net.Mail命名空间包含用于将电子邮件发送到简单邮件传输协议(SMTP)服务器进行传输的类。其中MailMessage类用来表示邮件的内容;Attachment类用来创建邮件附件;S...

C# System.Net.NetworkInformation 命名空间学习之NetworkInterface 类获取IP,DNS,Gateway,Mask, MAC等网络相关信息

慢慢更新
  • dxy0613
  • dxy0613
  • 2014年02月10日 10:24
  • 2486

C#学习笔记16——.net中System.Security.Cryptography 命名空间

.net中System.Security.Cryptography命名空间 在.NETFramework出现之前,如果我们需要进行加密的话,我们只有各种较底层的技术可以选择,如 Microsoft C...
  • byxdaz
  • byxdaz
  • 2011年09月01日 23:14
  • 9525

C#成魔之路<5>ADO.NET数据访问技术(1)

1、ADO.NET简介 ADO.NET是一组面向.NET程序员公开数据范围跟服务的类。他为创建分布式数据共享应用程序提供了丰富的组件。提供了一系列方法,用于支持对MicroSoft SQL Serv...

.Net V4.0 System.Drawing命名空间

  • 2015年04月03日 05:24
  • 23KB
  • 下载

.Net V4.0 System.Net命名空间概述

  • 2015年04月03日 05:17
  • 14KB
  • 下载

C#正则表达式(5):命名空间System.Text.RegularExpressions下面的类简介1

在命名空间RegularExpressions里有下面这些对象,10个类,一个代理,一个枚举类型 Classes   Class Description Ca...

asp.net网络编程技术与实践.rar

  • 2009年08月24日 07:21
  • 12.01MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#成魔之路<13> 网络编程技术(1)System.Net命名空间
举报原因:
原因补充:

(最多只允许输入30个字)