C#網絡編程(System.Net命名空間)

目錄

一、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 = "獲取網址網頁內容";}}
}

(2)生成效果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207200.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207200.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207200.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

記錄 | linux下互換鍵盤的Ctrl和CapsLock鍵

互換ctrl和CapsLK setxkbmap -option "ctrl:swapcaps"打開設置文件&#xff1a; sudo vim /etc/default/keyboard將其中的XKBOPTIONS中添加ctrl:swapcaps即可&#xff0c;如下所示&#xff1a; # KEYBOARD CONFIGURATION FILE# Consult the keyboard(5) manual pa…

【動態規劃系列】子數組的最大和

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

自動化測試框架需要具備哪些功能?

我們經常聽說使用了某某框架&#xff0c;那框架究竟是什么呢&#xff1f;框架有什么優勢和功能&#xff1f; 什么是自動化框架 自動化框架是包含了自動化測試的組織、執行、監控以及報告等流程的工具&#xff0c;是由多個工具、庫、模塊和API等組成的工具集。自動化框架的目標…

線性代數入門與學習筆記

該內容為重拾部分線性代數知識的學習筆記&#xff0c;內容上更多的是為了解決問題而學習的內容&#xff0c;并非系統化的學習。 針對的問題為&#xff1a;Music算法推導求解過程中的矩陣計算知識。 學習的內容包括&#xff1a;矩陣原理、矩陣行列式、矩陣的秩、線性變換矩陣變換…

我的創作紀念日——多線程進階分享

多線程-進階 1. 鎖的策略 1.1 樂觀鎖&悲觀鎖 樂觀鎖 預計在線程中數據大概率不會被其他線程拿去修改 對于加鎖所作的準備較少。只有當修改的操作真正發生了&#xff0c;才會進行加鎖操作 所以樂觀鎖適用于多讀少寫的情況&#xff0c;可以降低加鎖頻率&#xff0c;提升效…

C++初學教程四

一、程序設計 程序設計的三種基本結構:順序、選擇、循環 選擇結構(也叫分支結構) :判斷所指定的條件是否滿足,決定從給定的兩組或多組操作選擇其中的一種。 計算機的判斷是通過對表達式的計算來實現,也就是關系運算、邏輯運算。 用語句來體現就是if語句和switch語句。 一…

繼承與派生(2)

1.派生類的權限&#xff1a;派生類的成員函數可以訪問基類的public和protected類型的成員&#xff0c;而派生類的對象只能訪問public類型的成員 2.創建順序&#xff08;先創造后析構&#xff09;&#xff1a;基類函數&#xff0c;派生類函數&#xff0c;組合類函數 類的組合按…

每日一練 | 華為認證真題練習Day145

1、一臺路由器通過RIP、OSPF和靜態路由都學習到了到達同一目的地址的路由。默認情況下&#xff0c;VRP將最終選擇通過哪種協議學習到的路由&#xff1f; A. 三種協議學習到的路由都選擇 B. 靜態路由 C. OSPF D. RIP 2、如果網絡管理員沒有配置骨干區域&#xff0c;則路由器…

VUE+THREE.JS 點擊模型相機緩入查看模型相關信息

點擊模型相機緩入查看模型相關信息 1.引入2.初始化CSS3DRenderer3.animate 加入一直執行渲染4.點擊事件4.1 初始化renderer時加入監聽事件4.2 觸發點擊事件 5. 關鍵代碼分析5.1 移除模型5.2 創建模型上方的彈框5.3 相機緩入動畫5.4 動畫執行 1.引入 引入模型所要呈現的3DSprite…

Dexie 查詢sql速度優化

Dexie查詢速度慢的原因主要一個優化點是復雜查詢下的count執行。 以下摘自Dexie官方文檔&#xff1a;https://dexie.org/docs/Collection/Collection.count() If executed on simple queries, the native IndexedDB ObjectStore count() method will be called (fast execution…

對標Gen-2!Meta發布新模型,進軍文生視頻賽道

隨著擴散模型的飛速發展&#xff0c;誕生了Midjourney、DALLE 3、Stable Difusion等一大批出色的文生圖模型。但在文生視頻領域卻進步緩慢&#xff0c;因為文生視頻多數采用逐幀生成的方式,這類自回歸方法運算效率低下、成本高。 即便使用先生成關鍵幀,再生成中間幀新方法。如…

Flink Window中典型的增量聚合(ReduceFunction / AggregateFunction)

一、什么是增量聚合函數 在Flink Window中定義了窗口分配器&#xff0c;我們只是知道了數據屬于哪個窗口&#xff0c;可以將數據收集起來了&#xff1b;至于收集起來到底要做什么&#xff0c;其實還完全沒有頭緒&#xff0c;這也就是窗口函數所需要做的事情。所以在窗口分配器…

聽GPT 講Rust源代碼--src/tools(9)

File: rust/src/tools/rust-analyzer/crates/ide-assists/src/handlers/apply_demorgan.rs 在Rust源代碼中&#xff0c;apply_demorgan.rs文件位于rust-analyzer工具的ide-assists庫中&#xff0c;其作用是實現一個輔助函數&#xff0c;用于在代碼中應用De Morgan定律的變換。 …

Android : 籃球記分器app _簡單應用

示例圖&#xff1a; 1.導包 在build.gradle 中 加入 // 使用androidx版本庫implementation androidx.lifecycle:lifecycle-extensions:2.1.0-alpha03 2. 開啟dataBinding android{...// 步驟1.開啟data bindingdataBinding {enabled true}...} 3.寫個類繼承 ViewModel pac…

整數與IP地址間的轉換

原理&#xff1a;ip地址的每段可以看成是一個0-255的整數&#xff0c;把每段拆分成一個二進制形式組合起來&#xff0c;然后把這個二進制數轉變成一個長整數。 舉例&#xff1a;一個ip地址為10.0.3.193 每段數字相對應的二進制數 10 00001010 0 00000000 3 00000011 193 110000…

自下而上-存儲全棧(TiDB/RockDB/SPDK/fuse/ceph/NVMe/ext4)存儲技術專家成長路線

數字化時代的到來帶來了大規模數據的產生&#xff0c;各行各業都面臨著數據爆炸的挑戰。 隨著云計算、物聯網、人工智能等新興技術的發展&#xff0c;對存儲技術的需求也越來越多樣化。不同應用場景對存儲的容量、性能、可靠性和成本等方面都有不同的要求。具備存儲技術知識和技…

機器學習-聚類問題

前言 聚類算法又叫做”無監督分類“&#xff0c;目標是通過對無標記訓練樣本來揭示數據的內在性質及 規律&#xff0c;為進一步的數據分析提供基礎。 Kmeans 作為聚類算法的典型代表&#xff0c;Kmeans可以說是最簡單的聚類算法&#xff0c;沒有之一&#xff0c;那她是怎么完…

MySQL為何偏愛B+樹索引

一、MySQL、B樹概念 MySQL是一種關系型數據庫&#xff0c;它使用SQL語言來操作數據。SQL語言可以實現對數據的增刪改查等操作&#xff0c;但是如果數據量很大&#xff0c;那么這些操作的效率就會很低。為了提高效率&#xff0c;MySQL引入了索引的概念。 索引是一種數據結構&am…

人體關鍵點檢測1:人體姿勢估計數據集

人體關鍵點檢測1&#xff1a;人體姿勢估計數據集 目錄 人體關鍵點檢測1&#xff1a;人體姿勢估計數據集 1.人體姿態估計 2.人體姿勢估計數據集 &#xff08;1&#xff09;COCO數據集 &#xff08;2&#xff09;MPII數據集 &#xff08;3&#xff09;Human3.6M &#xf…

PostgreSQL 主鍵和唯一鍵的區別

主鍵和唯一鍵的區別 主鍵&#xff08;Primary Key&#xff09;&#xff1a; 主鍵是用于唯一標識表中的每一條記錄的鍵。主鍵必須是唯一的&#xff0c;不允許為空。一個表只能有一個主鍵。主鍵可以由一個或多個字段組成。主鍵的值在整個表中必須是唯一的&#xff0c;用于確保數據…