7-1 网络编程技术(上)

本章内容
7-1  网络基础
7-2   HTTP 网络编程
7-3  TCP 网络编程
在某些情况下,我们需要在Windows应用程序中获取Web站点信息或者访问网络服务器,本章讨论使用各种网络协议(主要是HTTPTCP协议)访问网络和Internet,包括文件的下载、网络接口编程等。
u 本章学习目标:
n 了解 System. Net System.Net.Sockets 命名空间
n 掌握访问网络资源的基本方法
n 可以使用不同协议通讯

7-1  网络基础

在学习网络编程之前,我们要对网络通信原理有个基本认识。与网络相关的课程中,一个关键术语就是协议,什么是协议?协议是对等实体之间交换的帧、分组和报文的格式及意义的一组规则[1]。简单的说,协议就像一种国际通用语言,在不同国家之间进行交流时使用。
一般地将网络协议分层,主要有两种重要的网络体系即OSI七层参考模型和TCP/IP四层参考模型。我们常用的网络协议中HTTP协议位于模型中的应用层,是较高层协议;TCP协议位于模型中的传输层,是较低层协议。
Internet上,每一台机器都有自己的IP地址,IP地址是分配给每台主机(或路由器)的一个在全世界范围内惟一的标识符。一个IP地址主要由两部分组成:一部分是用于标识该地址所从属的网络标识,另一部分用于指明该网络上某个特定主机的主机号。目前,大多数IP编址方案仍采用IPv4编址方案,即使用32位的二进制地址进行识别,我们常见的形式是将32位的IP地址分成4段,然后把4个段分别用十进制表示,中间用圆点分开,这种方法叫做点分十进制表示法也是字符串表示法。
但是通常我们在浏览器的地址栏里输入主机名称(DNS)或域名,比如www.sina.com,在实际连接过程中,需将名称转为地址进行连接,这其中需要域名解析服务器来完成这个工作。.NET framework中提供了相应的操作IP地址类和主机信息类。

1 案例学习:IP地址类

IPAddress 类代表IP地址,可在十进制表示法和实际的整数地址之间进行转换。IPHostEntry类封装了与主机相关的信息。Dns类可以检索IP地址和获取主机名。
u 实验步骤(1):
新建一个Winform项目,本项目主要实现IP地址和主机名称的相互转换。
u 实验步骤(2):
在新建的Winform窗体上,从工具箱之中拖拽三个textbox控件、一个listBox控件和一个button控件,按照图7-1进行控件布局。
7-1 网络编程技术(上)_第1张图片
7-1 IP地址类的使用
u 实验步骤(3):
用鼠标双击“地址转换”按钮,添加源代码如下:
  
private void button1_Click(object sender, EventArgs e)
{
IPHostEntry host = Dns.Resolve(txtUrl.Text);
foreach (IPAddress add in host.AddressList)
{
                long ip = add.Address;
                listBox1.Items.Add(add.ToString());
                listBox1.Items.Add(ip.ToString());
}
txtName.Text = host.HostName;
txtBroad.Text = IPAddress.Broadcast.ToString();
}
 
 
问题讨论:
1 IPAddress类的Address属性是Long长整型的数字,表示以点间隔的32位字符串地址对应的整数,其中第三个文本框显示的是广播地址。
    2 HostName属性 显示的主机名称可能与输入的名称不同,可能有存在域名名称代理的情况

7-2  HTTP网络编程

7-2-1  WebClient

提供用于将数据发送到由 URI 标识的资源及从这样的资源接收数据的常用方法。主要成员,如表7-1所示:
方法
说明
DownloadString
以字符串形式下载位于指定 Uri 的资源。
OpenRead
打开流向指定资源的可读流。
OpenWrite
打开一个流以将数据写入指定的资源。这些方法不会阻止调用线程。
UploadString
将指定的字符串上载到指定的资源。这些方法不会阻止调用线程。
属性
说明
IsBusy
获取一个值,该值指示某一 Web 请求是否处于进行中。
BaseAddress
获取或设置 WebClient 发出请求的基 URI
7-1

1案例学习:文件下载

本次实验目标是使用 WebClient 类的方法进行简单的网络数据获取。
u 实验步骤(1):
新建一个 Winform 项目,并在当前新建项目的窗体上添加一个按钮和一个文本框和一个 RichTextBox 控件。本案例用以实现当用户在文本框中输入文件的网络位置,单击按钮时,将文件下载到本地,并将结果显示在 RichTextBox 中,将 RichTextBox 的只读属性设置为 True 。界面布局设置如图7-2所示。
u 实验步骤(2):用鼠标双击“下载”按钮,添加功能源代码如下:
private void button1_Click(object sender, EventArgs e)
{
WebClient client = new WebClient();
Stream s = client.OpenRead(txtUrl.Text);
StreamReader reader = new StreamReader(s);
rtbResult.Text = reader.ReadToEnd();
    reader.Close();
s.Close();
}
7-2 WebClient下载网页
这里看到的是 Google 首页的源文件,和我们在IE浏览器中打开 Google 首页时单击右键->查看源文件,看到的内容是相同的,是在浏览器中返回的静态 html 文件。

7-2-2   WebRequest类和WebResponse

WebClient 类使用上比较简单,但是功能有限,而且不能提供身份验证相关信息,因此基于安全性考虑,并不是很实用。如果使用某种特定协议,需要结合使用 WebRequest 类和 WebResponse 类。 WebRequest 类用于发出对一个URI的请求,是抽象类,使用时需结合具体协议从其派生,其主要成员,如表7-2所示:
方法
说明
Create
创建对象
GetResponse
在子类中被重写时,返回对 Internet 请求的响应。
GetRequestStream
子类中重写时,返回用于将数据写入 Internet 资源的 Stream
属性
说明
ContentLength
在子类中被重写时,获取或设置所发送的请求数据的内容长度。
ContentType
在子类中被重写时,获取或设置所发送的请求数据的内容类型。
Credentials
当在子类中被重写时,获取或设置用于对 Internet 资源请求进行身份验证的网络凭据。
Method
子类中被重写时,获取或设置要在此请求中使用的协议方法。
RequestUri
获取与请求关联的 Internet 资源的 URI
Headers
在子类中被重写时,获取或设置与请求关联的标头名称 / 值对的集合。
7-2
WebResponse 类代表从服务器获取的数据,主要成员,如表7-3所示:
方法
说明
GetResponseStream
子类中重写时,从 Internet 资源返回数据流。
属性
说明
ContentLength
在子类中被重写时,获取或设置所发送的请求数据的内容长度。
ContentType
在子类中被重写时,获取或设置所发送的请求数据的内容类型。
Headers
在子类中被重写时,获取或设置与请求关联的标头名称 / 值对的集合。
7-3

1案例学习:获取HTTP Headers信息

本次实验目标是使用 HTTP 协议,使用派生类 HttpWebRequest HttpWebResponse
u 实验步骤(1):
新建一个 Winform 项目,并在当前新建项目的窗体上添加一个按钮和一个列表框 ListBox 控件。本案例用以实现当用户从指定的网络位置,单击按钮时,将网络请求生成的 Headers 信息显示在 ListBox 中。将URI作为参数传送给 Create 方法,创建合适的对象; GetResponse 方法把请求发送给服务器,并检查返回的数据; GetResponseStream 方法获取返回的数据流。界面布局设置如图7-3所示。
u 实验步骤(2):用鼠标双击“ Headers ”按钮,添加功能源代码:
private void button1_Click(object sender, EventArgs e)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(txtUrl.Text);
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
NameValueCollection headers = res.Headers;
foreach (string name in headers)
{
listBox1.Items.Add(name + "-------" + headers[name]);
}
}
7-3 获取Http Headers信息
这里看到的是响应流中的 Headers 信息,分割线---之前是信息的名称,之后是信息的内容。如果链接的目标服务器需要身份验证,则需要通过 NetworkCredential 类提供相关身份信息。

7-2-3   Web浏览器控件

前面的例子我们看到的都是纯文本的结果显示,如果希望象网站那样浏览数据,可以在 windows 应用中直接添加浏览器控件。2.0以上版本已将 WebBrowser 控件加入工具箱,不需手动添加项。

1 案例学习:在窗体中显示网页

本次实验目标是使用 Web 浏览器控件。
u    实验步骤(1):
新建一个 Winform 项目,并在当前新建项目的窗体上添加一个按钮和文本框,在工具箱中找到 WebBrowser 控件,并拖拽到窗体上。本案例用以实现在文本框中输入 www.baidu.com ,单击按钮时,在浏览器控件中显示出 该网站的 页面。界面布局设置如图7-4所示。
u       实验步骤(2):用鼠标双击“链接到”按钮,添加功能源代码:
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate(textBox1.Text, false);
}
其中使用 WebBrowser 类的 Navigate 方法发送 HTTP 请求,显示来自给定 URI 的输出,第一个参数包含给定 URL 的字符串,第二个参数是布尔类型,表示是否在新窗口显示。运行结果如下图:
7-4 WebBrowser 控件

本文出自 “熊猫写程序” 博客,转载请与作者联系!

你可能感兴趣的:(C#,职场,网络编程,休闲)