目录
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类的常用方法及说明:
(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地址关联。
(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地址和端口号。
(1) 示例源码
(2)生成效果
4.WebClient类
WebClient类提供向URI标识的任何本地、Intranet或Internet资源发送数据以及从这些资源接收数据的公共()方法。
默认情况下,WebClient实例不发送可选的HTTP报头。如果要发送可选报头,必须将该报头添加到Headers(哈希表)集合中。
(1) 示例源码
(2)生成效果
5.WebRequest类和WebResponse类
WebRequest类是.NET Framework的请求/响应模型的抽象基类,用于访问Internet数据。使用该请求/响应模型的应用程序可以用协议不可知的方式从Internet请求数据,在这种方式下,应用程序处理WebRequest类的实例,而协议特定的子类则执行请求的具体细节。
WebResponse类也是抽象基类,应用程序可以使用WebResponse类的实例以协议不可知的方式参与请求和响应事务,而从WebResponse类派生的协议类携带请求的详细信息。另外,需要注意的是,客户端应用程序不直接创建WebResponse对象,而是通过对WebRequest实例调用GetResponse()方法来进行创建。
WebRequest类的常用属性、方法及说明
WebResponse类的常用属性、方法及说明
客户端应用程序不直接创建WebResponse对象,而是通过对WebRequest实例调用GetResponse()方法来进行创建。