C#.NET网络程序开发的基本类
C#.NET的System.NET命名空间为Internet网络上使用的多种协议提供了便利的编程接口。
1、IPAddress类
IPAddress类提供的是主机的IP地址及相关信息,包括IP回环地址Loopback、IP广播地址Broadcase以及对IPv6协议的支持。
IPAddress的构造函数是publicIPAddress(longaddress)
IPAddress类的常用公共方法
比较两个 IP 地址。
以字节数组形式提供IPAddress的副本。
将值由主机字节顺序转换为网络字节顺序
指示指定的 IP 地址是否为返回地址。
将数字由网络字节顺序转换为主机字节顺序。
IP 地址将字符串转换为IPAddress实例。
将 Internet 地址转换为其标准表示法。
确定字符串是否为有效 IP 地址。
常用Parse()方法创建IPAddress实例,其语法如下:
public static IPAddress Parse(string ipString)
将IP地址转换成标准表示法的ToString()方法的语法如下:
public override string ToString()
2、IPHostEntry类
IPHostEntry类将域名系统(DNS)主机名与别名和匹配的IP地址相关联,它提供主机的IP地址(借助IPAdress类)、主机名及别名。
IPHostEntry类的属性:
属性名称
类型
说明
IPAddress[]
获取或设置与主机关联的 IP 地址列表。
string[]
获取或设置与主机关联的别名列表,通常为一组字符串。
string[]
获取或设置主机的 DNS 名称。
3、IPEndPoint类
将网络端点表示为 IP 地址和端口号。其对象表示指定IP地址和端口号的组合,从而形成到主机的连接点。
命名空间:System.Net**程序集:**System(在 System.dll 中)
语法
C#
[SerializableAttribute]
public class IPEndPoint : EndPoint
构造函数
名称
说明
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3HDIyXTv-1648692312470)(https://i-msdn.sec.s-msft.com/areas/global/content/clear.gif)]
用指定的地址和端口号初始化IPEndPoint类的新实例。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wyGPwTWn-1648692312471)(https://i-msdn.sec.s-msft.com/areas/global/content/clear.gif)]
用指定的地址和端口号初始化IPEndPoint类的新实例。
IPEndPoint类属性
属性名称
类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SQBJxyQo-1648692312472)(https://i-msdn.sec.s-msft.com/areas/global/content/clear.gif)]Address
IPAddress
获取或设置终结点的 IP 地址。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jTZCiouy-1648692312473)(https://i-msdn.sec.s-msft.com/areas/global/content/clear.gif)]AddressFamily
AddressFamily
获取网际协议 (IP) 地址族。(重写EndPoint.AddressFamily。)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kQbd15B8-1648692312474)(https://i-msdn.sec.s-msft.com/areas/global/content/clear.gif)]Port
int
获取或设置终结点的端口号。
4、Dns 类
Dns类是一个静态类,提供简单的域名解析功能。
Dns类的静态方法:
GetHostName:获取本地计算机的主机名。
GetHostAddresses:返回指定主机的 Internet 协议 (IP) 地址。
示例1、
下面的示例在 DNS 数据库中查询关于主机 www.contoso.com 的信息。
IPHostEntry hostInfo = Dns.GetHostByName(“www.contoso.com”);
示例2、编程实现获取并显示本机的IP地址、主机名信息。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net; ? //网络
namespace showIP
{
? ? class Program
? ? {
? ? ? ? static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? //获得本机局域网所有IP地址
? ? ? ? ? ? IPAddress[] addr = Dns.GetHostByName(Dns.GetHostName()).AddressList;
? ? ? ? ? ? foreach (IPAddress ip in addr)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Console.WriteLine("本机IP地址为:" +ip.ToString());
? ? ? ? ? ? }
? ? ? ? ? ? //获取本机主机名
? ? ? ? ? ? Console.WriteLine("本机主机名为:"+Dns.GetHostEntry(addr[0]).HostName);
? ? ? ? ? ? //创建本机端口
? ? ? ? ? ? IPAddress localIp = IPAddress.Parse("127.0.0.1");
? ? ? ? ? ? IPEndPoint iep = new IPEndPoint(localIp, 80);
? ? ? ? ? ? Console.WriteLine("IP端点:" + iep.ToString());
? ? ? ? ? ? Console.WriteLine("IP端口:" + iep.Port);
? ? ? ? ? ? Console.WriteLine("IP地址族:" + iep.AddressFamily);
? ? ? ? ? ? Console.WriteLine("可分配端口最大值:" + IPEndPoint.MaxPort);
? ? ? ? ? ? Console.WriteLine("可分配端口最小值:" + IPEndPoint.MinPort);
? ? ? ? }
? ? }
}
5、C#的命名空间System.Net.NetworkInformation提供了与Ping有关的Ping、PingOptions和PingReply类
(1)Ping类
利用Ping类检测本地主机与远程主机之间的通信是否正常。
(2)
PingOptions 类
用于控制如何Ping传输数据包。
命名空间:???System.Net.NetworkInformation
程序集:??System(位于 System.dll)
继承层次结构
??System.Net.NetworkInformation.PingOptions
(3)PingReply 类
提供有关的状态和生成的数据的信息?Send或SendAsync操作
命名空间:???System.Net.NetworkInformation
程序集:??System(位于 System.dll)
继承层次结构
??System.Net.NetworkInformation.PingReply
示例3、编程实现用Ping、PingOptions和PingReply类测试目标主机是否可以到达的信息。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net; ? //网络
using System.Net.NetworkInformation; ?//网络
namespace PingHost
{
? ? class Program
? ? {
? ? ? ? static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? Ping pingSender = new Ping();
? ? ? ? ? ? PingOptions options = new PingOptions();
? ? ? ? ? ? options.DontFragment = true;
? ? ? ? ? ? //data为要发送的数据
? ? ? ? ? ? string data = “aaaaaaa”;
? ? ? ? ? ? byte[] buffer = Encoding.ASCII.GetBytes(data);
? ? ? ? ? ? int timeout = 120;
? ? ? ? ? ? //Ping网络IP地址为:192.168.0.103的主机
? ? ? ? ? ? PingReply reply = pingSender.Send(“192.168.0.103”, timeout, buffer, options);
? ? ? ? ? ? if (reply.Status==IPStatus.Success)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Console.WriteLine(“Address:{0}”, reply.Address.ToString());
? ? ? ? ? ? ? ? Console.WriteLine(“RoundTrip time:{0}”, reply.RoundtripTime);
? ? ? ? ? ? ? ? Console.WriteLine(“Time to live:{0}”, reply.Options.Ttl);
? ? ? ? ? ? ? ? Console.WriteLine(“Don’t fragment:{0}”, reply.Options.DontFragment);
? ? ? ? ? ? ? ? Console.WriteLine(“Buffer size:{0}”, reply.Buffer.Length);
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Console.WriteLine(“目标主机Ping失败”);
? ? ? ? ? ? }
? ? ? ? ? ? Console.ReadLine();
? ? ? ? }
? ? }
}
)