博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
7-1 网络编程技术(上)
阅读量:5941 次
发布时间:2019-06-19

本文共 4490 字,大约阅读时间需要 14 分钟。

本章内容
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 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所示:
方法
说明
以字符串形式下载位于指定
  
的资源。
打开流向指定资源的可读流。
打开一个流以将数据写入指定的资源。这些方法不会阻止调用线程。
将指定的字符串上载到指定的资源。这些方法不会阻止调用线程。
属性
说明
获取一个值,该值指示某一
 Web 
请求是否处于进行中。
获取或设置
  
发出请求的基
 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 
请求的响应。
子类中重写时,返回用于将数据写入
 Internet 
资源的
 Stream
属性
说明
在子类中被重写时,获取或设置所发送的请求数据的内容长度。
在子类中被重写时,获取或设置所发送的请求数据的内容类型。
当在子类中被重写时,获取或设置用于对
 Internet 
资源请求进行身份验证的网络凭据。
子类中被重写时,获取或设置要在此请求中使用的协议方法。
获取与请求关联的
 Internet 
资源的
 URI
在子类中被重写时,获取或设置与请求关联的标头名称
/
值对的集合。
7-2
WebResponse
类代表从服务器获取的数据,主要成员,如表7-3所示:
方法
说明
子类中重写时,从
 Internet 
资源返回数据流。
属性
说明
在子类中被重写时,获取或设置所发送的请求数据的内容长度。
在子类中被重写时,获取或设置所发送的请求数据的内容类型。
在子类中被重写时,获取或设置与请求关联的标头名称
/
值对的集合。
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
控件
本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/231842,如需转载请自行联系原作者
你可能感兴趣的文章
cp讲解
查看>>
MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)
查看>>
如何在 Swift 语言下使用 iOS Charts API 制作漂亮图表?
查看>>
论代码审查的重要性
查看>>
「docker实战篇」python的docker爬虫技术-导学(一)
查看>>
如何确定一个网站是用Wordpress开发的
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
wdcp 安装
查看>>
C语言运算符优先级相关问题
查看>>
MP4视频播放器代码
查看>>
Nginx 匹配 iphone Android 微信
查看>>
ldap
查看>>
Yum软件仓库配置
查看>>
linux 压缩与解压总结
查看>>
mysql脚本1064 - You have an error in your SQL syntax; check the manual
查看>>
nessus 本地扫描(一)
查看>>
linux服务器磁盘陈列
查看>>
python----tcp/ip http
查看>>
我的友情链接
查看>>