目錄
一、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};// Form1AutoScaleDimensions = 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 SYSLIB0014richtextBox1!.Text = string.Empty;WebClient wclient = new() //實例化WebClient類對象{BaseAddress = textBox1!.Text, //設置WebClient的基地址URIEncoding = 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聲明一個流讀取變量sreaderstring 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 = "獲取網址網頁內容";}}
}