目录
一、System.Net命名空间
1.Dns类
(1)示例源码
(2)生成效果
2.IPAddress类
(1)示例源码
(2)生成效果
3.IPEndPoint类
(1) 示例源码
(2)生成效果
4. IPHostEntry类
(1)示例源码
(2)生成效果
4.WebClient类[已废弃]
(1) 示例源码
(2)生成效果
5.WebRequest类和WebResponse类[已废弃]
(1) 示例源码
(2)生成效果
C#作为一种编程语言,它提供了对网络编程的全面支持。使用C#进行网络编程时,通常都需要使用System.Net命名空间和System.Net.Sockets命名空间。
一、System.Net命名空间
System.Net命名空间为当前网络上使用的多种协议提供了简单的编程接口,而它所包含的WebRequest类和WebResponse类形成了所谓的可插接式协议的基础,可插接式协议是网络服务的一种实现,它使用户能够开发出使用Internet资源的应用程序,而不必考虑各种不同协议的具体细节。
1.Dns类
Dns类是一个静态类,它从Internet域名系统(DNS)检索关于特定主机的信息。在IPHostEntry类的实例中返回来自DNS查询的主机信息。如果指定的主机在DNS数据库中有多个入口,则IPHostEntry包含多个IP地址和别名。Dns类的常用方法及说明:
方 法 | 说 明 |
BeginGetHostAddresses | 异步返回指定主机的Internet 协议(IP)地址 |
BeginGetHostByName | 开始异步请求关于指定 DNS主机名的IPHostEntry 信息 |
EndGetHostAddresses | 结束对 DNS信息的异步请求 |
EndGetHostByName | 结束对 DNS信息的异步请求 |
EndGetHostEntry | 结束对 DNS信息的异步请求 |
GetHostAddresses | 返回指定主机的Internet 协议(IP)地址 |
GetHostByAddress | 获取 IP地址的 DNS 主机信息 |
GetHostByName | 获取指定 DNS 主机名的 DNS信息 |
GetHostEntry | 将主机名或 IP地址解析为IPHostEntry 实例 |
GetHostName | 获取本地计算机的主机名 |
(1)示例源码
//根据主机网址获取主机IP、主机DNS、主机名、本机名
using System.Net;
namespace _01_1
{
public partial class Form1 : Form
{
private Label? label1;
private Label? label2;
private Label? label3;
private Label? label4;
private Button? button1;
private TextBox? textBox1;
private TextBox? textBox2;
private TextBox? textBox3;
private TextBox? textBox4;
public Form1()
{
InitializeComponent();
Load += Form1_Load;
}
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) //循环访问获得的IP地址
{
textBox2.Text = ip.ToString();//将得到的IP地址显示在文本框中/获取本机名
}
textBox3!.Text = Dns.GetHostName();
}
textBox4!.Text = Dns.GetHostEntry(Dns.GetHostName()).HostName;//根据指定的主机名获取DNS信息
}
private void Form1_Load(object? sender, EventArgs e)
{
//
// label1
//
label1 = new Label
{
AutoSize = true,
Location = new Point(12, 9),
Name = "label1",
Size = new Size(43, 17),
TabIndex = 0,
Text = "输入主机网址:"
};
//
// label2
//
label2 = new Label
{
AutoSize = true,
Location = new Point(12, 39),
Name = "label2",
Size = new Size(43, 17),
TabIndex = 1,
Text = "主机IP地址:"
};
//
// label3
//
label3 = new Label
{
AutoSize = true,
Location = new Point(195, 39),
Name = "label3",
Size = new Size(43, 17),
TabIndex = 2,
Text = "本地主机名:"
};
//
// label4
//
label4 = new Label
{
AutoSize = true,
Location = new Point(12, 67),
Name = "label4",
Size = new Size(43, 17),
TabIndex = 3,
Text = "DNS主机名:"
};
//
// button1
//
button1 = new Button
{
Location = new Point(317, 3),
Name = "button1",
Size = new Size(75, 23),
TabIndex = 4,
Text = "确定",
UseVisualStyleBackColor = true
};
button1.Click += Button1_Click;
//
// textBox1
//
textBox1 = new TextBox
{
Location = new Point(95, 6),
Name = "textBox1",
Size = new Size(140, 23),
TabIndex = 5
};
//
// textBox2
//
textBox2 = new TextBox
{
Location = new Point(95, 33),
Name = "textBox2",
Size = new Size(100, 23),
TabIndex = 6
};
//
// textBox3
//
textBox3 = new TextBox
{
Location = new Point(270, 33),
Name = "textBox3",
Size = new Size(120, 23),
TabIndex = 7
};
//
// textBox4
//
textBox4 = new TextBox
{
Location = new Point(95, 61),
Name = "textBox4",
Size = new Size(120, 23),
TabIndex = 8
};
// Form1
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(404, 93);
Controls.Add(textBox4);
Controls.Add(textBox3);
Controls.Add(textBox2);
Controls.Add(textBox1);
Controls.Add(button1);
Controls.Add(label4);
Controls.Add(label3);
Controls.Add(label2);
Controls.Add(label1);
Name = "Form1";
Text = "获取主机IP";
}
}
}
(2)生成效果
2.IPAddress类
IPAddress类包含计算机在IP网络上的地址,它主要用来提供网际协议(IP)地址。IPHostEntry类将一个域名系统(DNS)主机名与一组别名和一组匹配的IP地址关联。
字段、属性及方法 | 说 明 |
Any字段 | 提供一个IP地址,指示服务器应侦听所有网络接口上的客户端活动。此字段为只读 |
Broadcast字段 | 提供1P 播地址。此学段为只读 |
Loopback字段 | 提供IP环回地址。此字段为只读 |
None字段 | 提供指示不应使用任何网络接口的IP地址。此字段为只读 |
Address属性 | 网际协议(IP)地址 |
AddressFamily属性 | 获取IP地址的地址族 |
IsIPv6LinkLocal属性 | 获取地址是否为IPv6链接本地地址 |
IsIPv6Multicast属性 | 获取地址是否为IPv6多路广播全局地址 |
IsIPv6SiteLocal属性 | 获取地址是否为IPv6站点本地地址 |
Scopeld属性 | 获取或设置IPv6地址范围标识符 |
GetAddressBytes()方法 | 以字节数组形式提供IPAddress的副本 |
IsLoopback()方法 | 指示指定的IP地址是否是环回地址 |
Parse()方法 | 将IP地址字符串转换为IPAddress实例 |
TryParse()方法 | 砷定字符甲是否为有效的IP地址 |
(1)示例源码
//输入主机网址获取其IP地址
using System.Net;
namespace _02
{
public partial class Form1 : Form
{
private Label? label1;
private Label? label2;
private Button? button1;
private TextBox? textBox1;
private TextBox? textBox2;
public Form1()
{
InitializeComponent();
Load += Form1_Load;
}
private void Button1_Click(object? sender, EventArgs e)
{
textBox2!.Text = string.Empty; //初始化Label标签
IPAddress[]ips =Dns.GetHostAddresses(textBox1!.Text); //获得指定主机的IP地址族
foreach (IPAddress ip in ips) //循环遍历得到的IP地址
textBox2.Text ="网际协议地址:"+ ip.Equals(IPAddress.Any) + "; \n" + "IP地址的地址族:" +
ip.AddressFamily.ToString() + "; \n" + "是否IPv6链接本地地址:" + ip.IsIPv6LinkLocal;
}
private void Form1_Load(object? sender, EventArgs e)
{
//
// label1
//
label1 = new Label
{
AutoSize = true,
Location = new Point(12, 9),
Name = "label1",
Size = new Size(43, 17),
TabIndex = 0,
Text = "输入网址:"
};
//
// label2
//
label2 = new Label
{
AutoSize = true,
Location = new Point(12, 41),
Name = "label2",
Size = new Size(43, 17),
TabIndex = 1,
Text = "显示IP:"
};
//
// button1
//
button1 = new Button
{
Location = new Point(317, 12),
Name = "button1",
Size = new Size(75, 23),
TabIndex = 4,
Text = "确定",
UseVisualStyleBackColor = true
};
button1.Click += Button1_Click;
//
// textBox1
//
textBox1 = new TextBox
{
Location = new Point(96, 12),
Name = "textBox1",
Size = new Size(215, 23),
TabIndex = 5
};
//
// textBox2
//
textBox2 = new TextBox
{
Location = new Point(95, 41),
Multiline = true,
Name = "textBox2",
Size = new Size(297, 80),
TabIndex = 6
};
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(404, 130);
Controls.Add(textBox2);
Controls.Add(textBox1);
Controls.Add(button1);
Controls.Add(label2);
Controls.Add(label1);
Name = "Form1";
StartPosition = FormStartPosition.CenterScreen;
Text = "获取IP地址";
}
}
}
(2)生成效果
3.IPEndPoint类
IPEndPoint类包含应用程序连接到主机上的服务所需的主机和本地或远程端口信息。通过组合服务的主机IP地址和端口号,IPEndPoint类形成到服务的连接点,它主要用来将网络端点表示为IP地址和端口号。
字段及属性 | 说 明 |
MaxPort字段 | 指定可以分配给Port属性的最大值。MaxPort值设置为0x0000FFFF。此字段为只读 |
MinPort字段 | 指定可以分配给Port属性的最小值。此字段为只读 |
Address属性 | 获取或设置终结点的IP地址 |
AddressFamily属性 | 获取网际协议(IP)地址族 |
Port属性 | 获取或设置终结点的端口号 |
(1) 示例源码
// 获取IP地址的端口号
using System.Net;
namespace _03
{
public partial class Form1 : Form
{
private Label? label1;
private Label? label2;
private Button? button1;
private TextBox? textBox1;
private TextBox? textBox2;
public Form1()
{
InitializeComponent();
Load += Form1_Load;
}
/// <summary>
/// 实例化IPEndPoint类对象
/// 使用IPEndPoint类对象获取终结点的IP地址和端口号
/// </summary>
private void Button1_Click(object? sender, EventArgs e)
{
IPEndPoint IPEPoint = new(IPAddress.Parse(textBox1!.Text), 80);
textBox2!.Text = "IP地址:" + IPEPoint.Address.ToString() + " \n端口号:" + IPEPoint.Port;
}
private void Form1_Load(object? sender, EventArgs e)
{
//
// label1
//
label1 = new Label
{
AutoSize = true,
Location = new Point(12, 9),
Name = "label1",
Size = new Size(43, 17),
TabIndex = 0,
Text = "输入IP地址:"
};
//
// label2
//
label2 = new Label
{
AutoSize = true,
Location = new Point(12, 41),
Name = "label2",
Size = new Size(43, 17),
TabIndex = 1,
Text = "显示端口号:"
};
//
// button1
//
button1 = new Button
{
Location = new Point(317, 12),
Name = "button1",
Size = new Size(75, 23),
TabIndex = 4,
Text = "确定",
UseVisualStyleBackColor = true
};
button1.Click += Button1_Click;
//
// textBox1
//
textBox1 = new TextBox
{
Location = new Point(96, 12),
Name = "textBox1",
Size = new Size(215, 23),
TabIndex = 5
};
//
// textBox2
//
textBox2 = new TextBox
{
Location = new Point(95, 41),
Multiline = true,
Name = "textBox2",
Size = new Size(297, 80),
TabIndex = 6
};
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(404, 130);
Controls.Add(textBox2);
Controls.Add(textBox1);
Controls.Add(button1);
Controls.Add(label2);
Controls.Add(label1);
Name = "Form1";
StartPosition = FormStartPosition.CenterScreen;
Text = "获取IP地址的端口号";
}
}
}
(2)生成效果
4. IPHostEntry类
IPHostEntry类用来为Internet主机地址信息提供容器类,IPHostEntry类通常和Dns类一起使用。其常用的属性及说明如下表:
属性 | 说明 |
AddressList | 获取或设置与主机关联的IP地址列表 |
Aliases | 获取或设置与主机关联的别名列表 |
HostName | 获取或设置主机的DNS名称 |
(1)示例源码
// IPHostEntry
// 使用Dns类获取主机的IP资源
// 使用IPHostEntry获取本机局域网内所有主机的IP资源
// 不用设计器的时候,变量定义的先后顺序很挑剔的。
using System.Net;
namespace _01_1
{
public partial class Form1 : Form
{
static Label? label1;
public Form1()
{
InitializeComponent();
Load += new EventHandler(Form1_Load);
}
public void Form1_Load(object? sender, EventArgs e)
{
//
// label1用于描述本机名和IP地址并显示输出
//
label1 = new Label()
{
//Multiline = true,
Dock = DockStyle.Fill,
BackColor = Color.White,
Font = new Font("宋体", 11F, FontStyle.Regular, GraphicsUnit.Point, 134),
};
//
// Form1
//
AutoScaleDimensions = new SizeF(6F, 12F);
AutoScaleMode = AutoScaleMode.Font;
BackColor = Color.White;
ClientSize = new Size(400, 400);
Controls.Add(label1);
Name = "Form1";
Text = "获取局域网内主机信息";
MyApp();
}
static void MyApp()
{
string IP, name, localip = "127.0.0.1";
string localname = Dns.GetHostName(); //获取本机名
IPAddress[] ips = Dns.GetHostAddresses(localname); //获取本机所在网络所有IP集合
foreach (IPAddress ip in ips)
{
if (ip != null)
localip = ip.ToString(); //获取本机所在网络所有IPv4地址
}
label1!.Text += "本机名:" + localname + " 本机IP地址:" + localip;
for (int i = 3; i <= 15; i++) //循环范围以当前电脑所在局域网IP资源为准
{
IP = "192.168.1." + i.ToString(); //IP字符串范围以当前电脑所在局域网IP资源为准
try
{
IPHostEntry host = Dns.GetHostEntry(IP); //获取IP封装对象
name = host.HostName.ToString(); //获取指定IP地址的主机名
label1!.Text += "\nIP地址 " + IP + " 的主机名称是:" + name;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
}
(2)生成效果
4.WebClient类[已废弃]
WebClient类提供向URI标识的任何本地、Intranet或Internet资源发送数据以及从这些资源接收数据的公共()方法。
默认情况下,WebClient实例不发送可选的HTTP报头。如果要发送可选报头,必须将该报头添加到Headers(哈希表)集合中。
该类在.NET 6.0以上已被废弃,采用措施的情况下仍然可以使用,作者不推荐使用。
属性及方法 | 说 明 |
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的资源 |
(1) 示例源码
// WebClient类的使用()方法
// 显示从指定网址中获取的网页内容。
// WebClient类在.NET 8.0下已被废弃,虽然下面的程序还能运行,但并不稳定,看个现象而已
using System.Net;
using System.Text;
namespace _04
{
public partial class Form1 : Form
{
private Label? label1;
private Label? label2;
private Button? button1;
private TextBox? textBox1;
private RichTextBox? richtextBox1;
public Form1()
{
InitializeComponent();
Load += Form1_Load;
}
/// <summary>
/// 实例化WebClient类对象
/// 使用OpenRead()方法获取指定网站的数据,并保存到Stream流中
/// 使用流StreamReader声明一个流读取变量sreader
/// </summary>
private void Button1_Click(object? sender, EventArgs e)
{
#pragma warning disable SYSLIB0014
richtextBox1!.Text = string.Empty;
WebClient wclient = new() //实例化WebClient类对象
{
BaseAddress = textBox1!.Text, //设置WebClient的基地址URI
Encoding = Encoding.UTF8 //指定下载字符串的编码方式
};
wclient.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); //为WebClient类对象添加报头
Stream stream = wclient.OpenRead(textBox1!.Text); //使用OpenRead()方法获取指定网站的数据,并保存到Stream流中
StreamReader sreader = new(stream); //使用流StreamReader声明一个流读取变量sreader
string str = sreader.ReadLine() ?? string.Empty;
while (str != null)
{
richtextBox1!.Text += str + "\n";
}
wclient.DownloadFile(textBox1.Text,DateTime.Now.ToFileTime()+".txt"); //调用WebClient对象的DownloadFile()方法将指定网站的内容保存到文件中
MessageBox.Show("保存到文件成功");
#pragma warning restore SYSLIB0014
}
private void Form1_Load(object? sender, EventArgs e)
{
//
// label1
//
label1 = new Label
{
AutoSize = true,
Location = new Point(12, 9),
Name = "label1",
Size = new Size(43, 17),
TabIndex = 0,
Text = "输入网址:"
};
//
// label2
//
label2 = new Label
{
AutoSize = true,
Location = new Point(12, 41),
Name = "label2",
Size = new Size(43, 17),
TabIndex = 1,
Text = "显示网页内容:"
};
//
// button1
//
button1 = new Button
{
Location = new Point(317, 12),
Name = "button1",
Size = new Size(75, 23),
TabIndex = 4,
Text = "确定",
UseVisualStyleBackColor = true
};
button1.Click += Button1_Click;
//
// textBox1
//
textBox1 = new TextBox
{
Location = new Point(96, 12),
Name = "textBox1",
Size = new Size(215, 23),
TabIndex = 5
};
//
// richtextBox1
//
richtextBox1 = new RichTextBox
{
Location = new Point(95, 41),
Multiline = true,
Name = "richtextBox1",
Size = new Size(297, 80),
TabIndex = 6
};
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(404, 130);
Controls.Add(richtextBox1);
Controls.Add(textBox1);
Controls.Add(button1);
Controls.Add(label2);
Controls.Add(label1);
Name = "Form1";
StartPosition = FormStartPosition.CenterScreen;
Text = "获取网址网页内容";
}
}
}
WebClient类在.NET 8.0下已被废弃,虽然下面的程序还能运行,但并不稳定(占用资源很大,几乎不可操作,卡死退出),看个现象而已
(2)生成效果
并在当前目录生成一个.txt文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml" lang="gb2312">
<head>
<meta http-equiv="refresh" content="0; url=https://www.youngsunpack.com/chinese2020/index.html" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="gb2312" />
<meta content="all" name="robots" />
<meta name="author" content="packrobot@163.com,凡仙" />
<meta name="Copyright" content="www.youngsunpack.com,版权所有,严禁转载" />
<link rel="bookmark" href="https://www.youngsunpack.com/favicon.ico" type="image/x-icon" />
<link rel="icon" href="https://www.youngsunpack.com/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="https://www.youngsunpack.com/favicon.ico" type="image/x-icon" />
<meta name="description" content="杭州永创专业生产和销售各式包装机械,打包机,包装机,自动包装机,自动打包机,饮料包装机械,食品包装机械,纸箱包装机械,定量包装机等包装设备和各种包装材料,产品远销五十多个国家和地区." />
<meta name="keywords" content="打包机,包装机械,包装机" />
<title>打包机,包装机械,包装机-杭州永创智能设备股份有限公司</title>
<style type="text/css">
<!--
body {
font-size: 12px;
width: 800px;
margin-right: auto;
margin-left: auto;
line-height: 20px;
visibility: hidden;
}
#main{
text-align: center;
width: 800px;
margin-right: auto;
margin-left: auto;
margin-top: 50px;
}
#mainContent{
color: #FFFFFF;
text-align: left;
}
#link{
text-align: center;
width: 800px;
margin-right: auto;
margin-left: auto;
margin-top: 10px;
}
.51la{
visibility: hidden;
}
-->
</style>
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
swfobject.embedSWF("chinese2020/flash/logo01.swf", "main", "300", "300", "9.0.0", "expressInstall.swf");
</script>
<script type="text/javascript">
//平台、设备和操作系统
var system ={
win : false,
mac : false,
xll : false
};
//检测平台
var p = navigator.platform;
system.win = p.indexOf("Win") == 0;
system.mac = p.indexOf("Mac") == 0;
system.x11 = (p == "X11") || (p.indexOf("Linux") == 0);
if(system.win||system.mac||system.xll){
}else{
window.location.href="http://m.youngsunpack.com";
}
</script>
</head>
<body>
<div id="link">
<a href="https://www.youngsunpack.com/chinese2020/index.html">简体中文</a> / <a href="https://www.youngsunpack.com/english/index.shtml">English</a>
</div>
<div style="display:none;">
<!--baidu.com-->
<script type="text/javascript">
var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://");
document.write(unescape("%3Cscript src='" + _bdhmProtocol + "hm.baidu.com/h.js%3F8fcd9e5482a62a5fa130468f4cf641ef' type='text/javascript'%3E%3C/script%3E"));
</script>
</div>
</body>
</html>
5.WebRequest类和WebResponse类[已废弃]
WebRequest类是.NET Framework的请求/响应模型的抽象基类,用于访问Internet数据。使用该请求/响应模型的应用程序可以用协议不可知的方式从Internet请求数据,在这种方式下,应用程序处理WebRequest类的实例,而协议特定的子类则执行请求的具体细节。
WebResponse类也是抽象基类,应用程序可以使用WebResponse类的实例以协议不可知的方式参与请求和响应事务,而从WebResponse类派生的协议类携带请求的详细信息。另外,需要注意的是,客户端应用程序不直接创建WebResponse对象,而是通过对WebRequest实例调用GetResponse()方法来进行创建。
该类在.NET 6.0以上已被废弃,采用措施的情况下仍然可以使用,作者不推荐使用。
WebRequest类的常用属性、方法及说明
属性及方法 | 说 明 |
ConnectionGroupName属性 | 当在子类中重写时,获取或设置请求的连接组的名称 |
ContentLength属性 | 当在子类中被重写时,获取或设置所发送的请求数据的内容长度 |
ContentType属性 | 当在子类中被重写时,获取或设置所发送的请求数据的内容类型 |
Headers属性 | 当在子类中被重写时,获取或设置与请求关联的报头名称/值对的集合 |
Method属性 | 当在子类中被重写时,获取或设置要在此请求中使用的协议方法 |
RequestUri属性 | 当在子类中被重写时,获取与请求关联的Internet资源的URI |
Timeout属性 | 获取或设置请求超时前的时间长度 |
Abort()方法 | 中止请求 |
BeginGetResponse()方法 | 当在子类中被重写时,开始对Intemet资源的异步请求 |
Create()方法 | 初始化新的WebRequest对象 |
EndGetResponse()方法 | 当在子类中重写时,返回WebResponse对象 |
GetRequestStream()方法 | 当在子类中重写时,返回用于将数据写入Intemet资源的Stream |
GetResponse()方法 | 当在子类中被重写时,返回对Internet请求的响应 |
RegisterPrefix()方法 | 为指定的URI注册WebRequest对象 |
WebResponse类的常用属性、方法及说明
属性及方法 | 说 明 |
ContentLength 属性 | 当在子类中重写时,获取或设置接收的数据的内容长度 |
ContentType 属性 | 当在派生类中重写时,获取或设置接收的数据的内容类型 |
Headers 属性 | 当在派生类中重写时,获取与此请求关联的报头名称/值对的集合 |
ResponseUri 属性 | 当在派生类中重写时,获取实际响应此请求的Intemet 资源的 URI |
Close()方法 | 当由子类重写时,将关闭响应流 |
GetResponseStream()方法 | 当在子类中重写时,从 Intenet 资源返回数据流 |
客户端应用程序不直接创建WebResponse对象,而是通过对WebRequest实例调用GetResponse()方法来进行创建。
(1) 示例源码
// WebRequest类和WebResponse类的使用方法
using System.Net;
namespace _05
{
public partial class Form1 : Form
{
private Label? label1;
private Label? label2;
private Button? button1;
private TextBox? textBox1;
private RichTextBox? richTextBox1; //不能用textBox代替,因为不能接受网页信息
public Form1()
{
InitializeComponent();
Load += Form1_Load;
}
/// <summary>
/// 实例化WebRequest对象
/// 使用OpenRead()方法获取指定网站的数据,并保存到Stream流中
/// 使用流StreamReader声明一个流读取变量sreader
/// </summary>
private void Button1_Click(object? sender, EventArgs e)
{
#pragma warning disable SYSLIB0014
richTextBox1!.Text = string.Empty;
WebRequest webrequest = WebRequest.Create(textBox1!.Text); //实例化一个WebRequest对象
webrequest.Credentials =CredentialCache.DefaultCredentials; //设置用于对Intemet资源请求进行身份验证的网络凭据
richTextBox1.Text="请求数据的内容长度:"+webrequest.ContentLength;//调用WebRequest对象的各种属性获取WebRequest请求的相关信息
richTextBox1.Text+="\n该请求的协议()方法:"+webrequest.Method;
richTextBox1.Text +="\n访问Intemet的网络代理:"+webrequest.Proxy;
richTextBox1.Text += "\n与该请求关联的Internet URI:"+webrequest.RequestUri;
richTextBox1.Text +="\n超时时间:"+webrequest.Timeout;
WebResponse webresponse =webrequest.GetResponse(); //调用WebRequest对象的GetResponse()方法实例化一个WebResponse对象
richTextBox1.Text += "\n响应该请求的Internet URI:" + webresponse.ResponseUri;//获取WebResponse响应的Internet资源的URI
Stream stream =webresponse.GetResponseStream(); //调用WebResponse对象的GetResponseStream()方法返回数据流
StreamReader sreader =new(stream); //使用创建的Stream对象创建一个StreamReader流读取对象
richTextBox1.Text += "\n"+sreader.ReadToEnd(); //读取流中的内容,井显示在RichTextBox控件中
sreader.Close();
stream.Close();
webresponse.Close();
#pragma warning restore SYSLIB0014
}
private void Form1_Load(object? sender, EventArgs e)
{
//
// label1
//
label1 = new Label
{
AutoSize = true,
Location = new Point(12, 9),
Name = "label1",
Size = new Size(43, 17),
TabIndex = 0,
Text = "输入网址:"
};
//
// label2
//
label2 = new Label
{
AutoSize = true,
Location = new Point(12, 41),
Name = "label2",
Size = new Size(43, 17),
TabIndex = 1,
Text = "显示网页内容:"
};
//
// button1
//
button1 = new Button
{
Location = new Point(317, 12),
Name = "button1",
Size = new Size(75, 23),
TabIndex = 4,
Text = "确定",
UseVisualStyleBackColor = true
};
button1.Click += Button1_Click;
//
// textBox1
//
textBox1 = new TextBox
{
Location = new Point(96, 12),
Name = "textBox1",
Size = new Size(215, 23),
TabIndex = 5
};
//
// richTextBox1
//
richTextBox1 = new RichTextBox
{
Location = new Point(95, 41),
Multiline = true,
Name = "richTextBox1",
Size = new Size(297, 80),
TabIndex = 6
};
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(404, 130);
Controls.Add(richTextBox1);
Controls.Add(textBox1);
Controls.Add(button1);
Controls.Add(label2);
Controls.Add(label1);
Name = "Form1";
StartPosition = FormStartPosition.CenterScreen;
Text = "获取网址网页内容";
}
}
}