C#网络编程(System.Net命名空间)

news2024/12/28 18:39:11

目录

一、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 = "获取网址网页内容";
        }
    }
}

(2)生成效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1295659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中东电商指南分享!盘点中东四大跨境电商平台

提到跨境电商新蓝海&#xff0c;就不得不想起土豪聚集地 ——中东&#xff0c;中东地区拥有庞大的人口、高人均GDP、强大的消费能力以及广泛普及的互联网&#xff0c;但外出购物却相对不便&#xff0c;正是这一特点为中东跨境电商市场创造了巨大的优势。随着中东地区电商的崛起…

excel做预测的方法集合

一. LINEST函数 首先&#xff0c;一元线性回归的方程&#xff1a; y a bx 相应的&#xff0c;多元线性回归方程式&#xff1a; y a b1x1 b2x2 … bnxn 这里&#xff1a; y - 因变量即预测值x - 自变量a - 截距b - 斜率 LINEST的可以返回回归方程的 截距(a) 和 斜…

macOS Big Sur/Mac电脑安装vscode显示您没有权限来打开应用程序‘Visual Studio Code‘ 请联系您的电脑或网络管理员问题修复

错误方法 首先我以为我的权限不足。&#xff0c;需要去用户群组里设置。结果根本不是这个的问题。 1.在系统偏好设置->用户与群组检查了一下我的用户是不是管理员 结果发现是管理员 2.根据苹果提示&#xff0c;右键我的文件夹->显示简介->最下面的共享与权限 解锁&…

【K8s】Kubernetes CRD 介绍(控制器)

文章目录 CRD 概述1. 操作CRD1.1 创建 CRD1.2 操作 CRD 2. 其他笔记2.1 Kubectl 发现机制2.2 校验 CR2.3 简称和属性 3. 架构设计3.1 控制器概览 参考 CRD 概述 CR&#xff08;Custom Resource&#xff09;其实就是在 Kubernetes 中定义一个自己的资源类型&#xff0c;是一个具…

python的extend函数详解

文章目录 语法功能示例例1&#xff1a;添加列表例2&#xff1a;添加元组例3&#xff1a;添加集合例4&#xff1a;添加字典&#xff08;只添加键&#xff09;例5&#xff1a;添加字符串例6&#xff1a;混合类型扩展例7&#xff1a;扩展空列表或不可迭代对象 注意事项&#xff1a…

❀dialog命令运用于linux❀

目录 ❀dialog命令运用于linux❀ msgbox部件&#xff08;消息框&#xff09; yesno部件&#xff08;yesno框&#xff09; inputbox部件&#xff08;输入文本框&#xff09; textbox部件&#xff08;文本框&#xff09; menu部件&#xff08;菜单框&#xff09; fselect部…

GeoPandas初体验:它是什么,我用它展示一下shp矢量数据

GeoPandas 是一个开源的 Python 库&#xff0c;用于处理地理空间数据。它扩展了 Pandas 这个流行的 Python 数据操作库&#xff0c;增加了对地理数据类型和操作的支持。GeoPandas 结合了 Pandas、Matplotlib 和 Shapely 的功能&#xff0c;提供了一个易于使用且高效的工具&…

【SpringCache】快速入门 通俗易懂

1. 介绍 Spring Cache 是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring Cache 提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff0c;例如&#xff1a; EHCache Caffeine Redis(常用…

《洛谷深入浅出进阶篇》p2568 GCD

P2568 GCD - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P2568 大致题意&#xff1a;给定正整数n&#xff0c;求1< x,y<n 且 gcd&#xff08;x&#xff0c;y&#xff09;为素数的数对&#xff08;x&#xff0c;y&#xff09;有多少对。…

Power BI - 5分钟学习透视列

每天5分钟&#xff0c;今天介绍Power BI透视列功能 什么是透视列&#xff1f; 透视列就是把行数据转换成列数据&#xff0c;也就是大家在工作中常说的行转列。 如何进行逆透视操作&#xff1a; 1&#xff0c;导入的【Sales】表&#xff0c;样例内容如下&#xff1a; 2, 【Ho…

智能优化算法应用:基于食肉植物算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于食肉植物算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于食肉植物算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.食肉植物算法4.实验参数设定5.算法结果6.参考…

leetcode 面试题 02.02. 返回倒数第k个节点

提建议就是&#xff0c;有些题还是有联系的&#xff0c;建议就收看完 876.链表的中间节点&#xff08;http://t.csdnimg.cn/7axLa&#xff09;&#xff0c;再将这一题联系起来 面试题 02.02. 返回倒数第k个节点 题目&#xff1a; 实现一种算法&#xff0c;找出单向链表中倒数第…

2023年加拿大百倍股研究报告

前言 股市中的百倍股&#xff0c;即那些在短期内实现超过百倍增长的股票&#xff0c;常引发投资者的深度关注和震撼。这类股票的成功并非偶然&#xff0c;而是基于公司或行业坚实的基础和长期的努力。千际投行策划的系列百倍股报告旨在为投资者提供深刻的洞察力和启示&#xf…

题目:挑选子串(蓝桥OJ 1621)

题目描述&#xff1a; 解题思路&#xff1a; 采用双指针的快慢指针。与蓝桥OJ1372类似。 图解 题解&#xff1a; #include <bits/stdc.h> using namespace std;const int N 1e5 9; int a[N];int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n, m…

轮询分区的设置

终于可以写MPI了&#xff0c;没想到&#xff0c;刚开始就当头一棒&#xff0c;我按照之前的配置MPI环境&#xff0c;配置完成就报错 好家伙&#xff0c;仔细检查了每一个步骤都没找到问题&#xff0c;上网搜索了一些解决方案&#xff0c;也没有解决。所幸&#xff0c;在配置MPI…

dll动态链接库【C#】

1说明&#xff1a; 在C#中&#xff0c;dll是添加 【类库】生成的。 2添加C#的dll&#xff1a; &#xff08;1&#xff09;在VS中新建一个Windows应用程序项目&#xff0c;并命名为TransferDll。 &#xff08;2&#xff09;打开Windows窗体设计器&#xff0c;从工具箱中为窗体…

CSGO游戏盲盒开箱源码 盲盒对战、幸运开箱、积分商城、Fl盲盒

源码介绍&#xff1a; CSGO游戏盲盒开箱源码 盲盒对战、幸运开箱、积分商城、Fl盲盒。这个是一个新花样玩法的盲盒程序。 仅供学习&#xff0c;请勿商用&#xff01;请购买正版程序运营。 代码下载&#xff1a;百度网盘

Prometheus 发现机制和告警

1.服务发现 Prometheus Server的数据抓取工作于Pull模型&#xff0c;因而&#xff0c;它必需要事先知道各Target的位置&#xff0c;然后才能从相应的Exporter或Instrumentation中抓取数据。在不同的场景下&#xff0c;需要结合不同的机制来实现对应的数据抓取目的。 对于小型的…

牛客算法题 【HJ91 走方格的方案数】 golang实现

题目 HJ91 走方格的方案数 描述 请计算n*m的棋盘格子&#xff08;n为横向的格子数&#xff0c;m为竖向的格子数&#xff09;从棋盘左上角出发沿着边缘线从左上角走到右下角&#xff0c;总共有多少种走法&#xff0c;要求不能走回头路&#xff0c;即&#xff1a;只能往右和往下…

51 单片机定时器

51 单片机定时器 目录 51 单片机定时器定时器作用定时器的工作模式模式1(常用)定时器时钟源中断系统定时器寄存器 补充实际使用 声明&#xff1a;本文以 STC89C52 单片机为例 定时器作用 主要有三个作用 1、用于计时系统&#xff0c;可实现软件计时&#xff0c;使程序每隔一段…