zoukankan      html  css  js  c++  java
  • C#网编基础类与API(一)

    C#网编基础类与API(一)

    一、IPadress类

    IPAddress类提供了对IP地址的转换、处理等功能。其Parse方法可将IP地址字符串转换为IPAddress实例。
    如:IPAddress ip = IPAddress.Parse(“192.168.1.1”);

    IPAddress   	类提供了7个只读字段:
    Any        		表示本地系统可用的任何IP地址   (0.0.0.0)
    Broadcast  		表示本地网络的IP广播地址    (255.255.255.255)
    IPv6Any    		Socket.Bind方法用此字段指出本地系统可用的IP地址
    IPv6Loopback    表示系统的回送地址
    IPv6None     	表示系统上没有可用的网络接口
    Loopback    	表示系统的回送地址          (127.0.0.1)
    None   			表示系统上没有可用的网络接口     (255.255.255.255)
    
    // 构造一个IP地址对象IPAddress的构造函数是 
    public  IPAddress(long address) //通常情况下用不到它,因为有简单的方法可以使用
    
    方法1:
    IPAddress.Any //分配你机器上一个任何可用ip来初始化这个IP地址对象。
    方法2:
    IPAddress.Parse("192.168.1.1");
    
    void Start () 
    {
            //IPAddress(Byte[])    新实例初始化 IPAddress 类地址指定为 Byte 数组。;
            IPAddress ipAddress1 = new IPAddress(new byte[] { 151, 33, 86, 50 }); 
            
            //IPAddress(Int64)    新实例初始化 IPAddress 类地址指定为 Int64。
            IPAddress ipAddress2 = new IPAddress(0x2414188f);
            
            //Parse(String)     IP 地址将字符串转换为 IPAddress 实例
            IPAddress ipAddress3 = IPAddress.Parse("192.168.100.9");
            Debug.Log("ip1="+ipAddress1+"/ip2="+ipAddress2+"/ip3="+ipAddress3);
    
            //IPEndPoint 表示主机地址和端口信息。
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddress1,8899);
            Debug.Log("IP="+ipEndPoint.Address+"/Port="+ipEndPoint.Port);
    
    
            IPAddress[] ips = Dns.GetHostEntry("www.baidu.com").AddressList;
            foreach (IPAddress ip in ips)
            {
                Debug.Log("baidu ip="+ip);
            }
    
    
            ips = Dns.GetHostAddresses("www.cctv.com");
            foreach (IPAddress ip in ips)
            {
                Debug.Log("cctv ip=" + ip);
            }
        }
    

    二、IPEndPoint

    IPEndPoint类包含应用程序连接到主机上的服务所需的主机和端口信息,通过组合服务的主机IP地址和端口号,IPEndPoint类形成到服务的连接点。

    在IPEndPoint类中有两个很有用的构造函数:
              public IPEndPoint(long, int); 
              public IPEndPoint(IPAddress, int);
              它们的作用就是用指定的地址和端口号初始化IPEndPoint类的新实例。
    

    IPAddress是ip,如“127.0.0.1”
    IPEndPoint是ip和端口对的组合,如“127.0.0.1:80”

    三、Dns类

    提供了一系列静态的方法,用于获取提供本地或远程域名对象的相关信息,常用方法有:

    //GetHostAddresses方法
    //获取指定主机的IP地址,返回一个IPAddress类型的数组,函数原形为:
    public static IPAddress[] GetHostAddresses(string hostNameOrAddress);
    //示例:
    IPAddress[] ip=Dns.GetHostAddresses("www.cctv.com");
    listBox1.Items.AddRange(ip);
     
    //GetHostName方法
    获取本机主机名。例如:string hostname = Dns.GetHostName();
    

    四、NetworkInterface类

    获取网络适配器的配置和统计信息,MAC地址等信息。

    • NetworkInterface类,提供网络适配器的配置和统计信息。

    1、可以通过它检测本机配置了多少网卡,哪些网络连接可用,获得网卡的MAC地址和速度等。

    2、此类封装本地计算机上的网络接口(也称作适配器)的数据。不需创建此类的实例;GetAllNetworkInterfaces 方法返回一个数组,对于本地计算机上的每个网络接口,该数组中都包含一个此类的实例。


    • IPInterfaceProperties类 提供有关支持 Internet 协议版本 4 (IPv4) 或 Internet 协议版本 6 (IPv6) 的网络接口的信息。

    1、此类可用于访问支持 IPv4 或 IPv6 的网络接口的配置和地址信息。不要创建此类的实例,这些实例将由 GetIPProperties 方法返回。

    2、若要访问 IPv4 特定属性,请使用 GetIPv4Properties 方法返回的对象。若要访问 IPv6 特定属性,请使用 GetIPv6Properties 方法返回的对象

    void Start () 
    {
            //网卡信息类
            NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface adap in adapters)
            {
                Debug.Log("CardName::" + adap.Name + " /Speed::" + adap.Speed + " /MAC::" +           BitConverter.ToString(adap.GetPhysicalAddress().GetAddressBytes()));
                IPInterfaceProperties ipProperties = adap.GetIPProperties();
                GatewayIPAddressInformationCollection gateways = ipProperties.GatewayAddresses;
                foreach (var tmp in gateways)
                {
                    Debug.Log("Gateway>>>"+tmp.Address);
                }
                IPAddressCollection dnsAddress = ipProperties.DnsAddresses;
                foreach (IPAddress tmp in dnsAddress)
                {
                    Debug.Log("DNS>>>" + BitConverter.ToString(tmp.GetAddressBytes()));
                }
            }
        }
    

    五、IPGlobalPropertie类

    此类提供有关本地计算机的网络接口和网络连接的配置和统计信息 可以获取本机TCP UDP 丢包 发包等数据。

    //得到本机Internet协议IPV4的统计数据;
                IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
                IPGlobalStatistics ipstat = properties.GetIPv4GlobalStatistics();
                Console.WriteLine("  Inbound Packet Data:");
                Console.WriteLine("      Received ............................ : {0}",ipstat.ReceivedPackets);
                Console.WriteLine("      Forwarded ........................... : {0}",ipstat.ReceivedPacketsForwarded);
                Console.WriteLine("      Delivered ........................... : {0}",ipstat.ReceivedPacketsDelivered);
                Console.WriteLine("      Discarded ........................... : {0}",ipstat.ReceivedPacketsDiscarded);
    

    六、IPHostEntry类

    1、IPHostEntry类的实例对象中包含了Internet主机的相关信息。
    2、常用属性有:AddressList属性和HostName属性。
    3、AddressList属性作用:获取或设置与主机关联的IP地址列表,是一个IPAddress类型的数组,包含了指定主机的所有IP地址;HostName属性则包含了服务器的主机名。

    //在Dns类中,有一个专门获取IPHostEntry对象的方法,通过IPHostEntry对象,可以获取本地或远程主机的相关IP地址。
    listBox1.Items.Add("网易所用的服务器IP地址有:");
    IPAddress[] ip = Dns.GetHostEntry("www.163.com").AddressList;
    listBox1.Items.AddRange(ip);
    listBox1.Items.Add("本机IP地址为:");
    ip = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
    listBox1.Items.AddRange(ip);
    

    七、Ping实现

    在app中,我们经常需要确定网络是否畅通,windows下自带ping.exe 那么我们C#中如何实现ping操作呢。
    Ping类位于System.Net.NetworkInformation下。通过它应用程序确定是否可通过网络访问远程计算机。

    Ping可确定 是否可成功联系远程主机。如果存在或配置了代理服务器、网络地址转换 (NAT) 设备或防火墙,可能会妨碍 Ping 成功。 Ping 成功只是表示可以通过网络访问远程主机;但并不保证远程主机上存在更高级别的服务(例如 Web 服务器)。
    此类提供的功能类似于 Ping.exe 命令行工具。 Send 和 SendAsync 方法将 Internet 控制消息协议 (ICMP) 回送请求消息发送到远程计算机并等待来自该计算机的 ICMP 回送答复消息。有关 ICMP 消息的详细说明,请参见 RFC 792,这可以在 http://www.ietf.org 上找到。

    PingOptions 类提供 Ttl 和 DontFragment 属性以控制如何传输 Internet 控制消息协议 (ICMP) 回送请求数据包。
    Ttl 属性为 Ping 类发送的数据包指定生存时间。此值指示在丢弃 Ping 数据包之前可以转发此数据包的路由节点数。如果要测试将数据包从源计算机发送到目标计算机所需的转发数(也称为跃点),设置此选项很有用。
    DontFragment 属性控制是否可将发送到远程主机的数据分成多个数据包。如果要测试用于传输数据包的路由器和网关的最大传输单元 (MTU),此选项很有用。
    PingOptions 类的实例被传递给 Send 和 SendAsync 方法,PingReply 类通过 Options 属性返回 PingOptions 的实例

    Ping 类尝试将 Internet 控制消息协议 (ICMP) 回送请求发送到远程计算机并接收该计算机通过 ICMP 回送答复消息返回的信息。 Ping 类使用 PingReply 类的实例返回有关操作的信息,如操作状态以及发送请求和接收答复所用的时间。
    Send 方法直接返回 PingReply 类的实例。 SendAsync 方法在 PingCompletedEventHandler 方法的 PingCompletedEventArgs 参数中返回 PingReply。通过 Reply 属性访问 PingReply。
    如果 Status 的值不是 Success,则不应该使用由 RoundtripTime、Options 或 Buffer 属性返回的值。 RoundtripTime 属性将返回零,Buffer 属性将返回空数组,而 Options 属性将返回 null。

    //Ping 实例对象;
                Ping pingSender = new Ping();
                //ping选项;
                PingOptions options = new PingOptions();
                options.DontFragment = true;
                string data = "ping test data";
                byte[] buf = Encoding.ASCII.GetBytes(data);
                //调用同步send方法发送数据,结果存入reply对象;
                PingReply reply = pingSender.Send("www.baidu.com", 120, buf, options);
                if (reply.Status == IPStatus.Success)
                {
                    Console.WriteLine("主机地址::"+reply.Address);
                    Console.WriteLine("往返时间::"+reply.RoundtripTime);
                    Console.WriteLine("生存时间TTL::"+reply.Options.Ttl);
                    Console.WriteLine("缓冲区大小::"+reply.Buffer.Length);
                    Console.WriteLine("数据包是否分段::"+reply.Options.DontFragment);
                }
    

    八、参考文献

    https://blog.csdn.net/liyuqian199695/article/details/53643865
    http://www.cnblogs.com/2Yous/p/5801067.html

  • 相关阅读:
    二分查找 java代码
    Failed at the bitcore-node@3.1.3 preinstall script './scripts/download' 设置linux proxy (代理)的方式
    github命令行实用操作
    H5无障碍旁白模式使用网页支持
    Vue框架搭建入门到熟悉
    解决IOS下返回不刷新的问题
    小程序—跳转 数据传递
    微信小程序——地图
    常用的正则判断
    JS 控制输入框输入表情emoji 显示在页面上
  • 原文地址:https://www.cnblogs.com/retry/p/9353648.html
Copyright © 2011-2022 走看看