热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#NetHelper

usingSystem;usingSystem.Text;usingSystem.Net.Sockets;usingSystem.Net.Mail;usingSystem.Net;

using System;
using System.Text;
using System.Net.Sockets;
using System.Net.Mail;
using System.Net;

namespace DotNet.Utilities
{
    ///


    /// 网络操作相关的类
    ///
   
    public class NetHelper
    {
        #region 检查设置的IP地址是否正确,返回正确的IP地址
        ///
        /// 检查设置的IP地址是否正确,并返回正确的IP地址,无效IP地址返回"-1"。
        ///

        /// 设置的IP地址
        //public static string GetValidIP(string ip)
        //{
        //    if (PageValidate.IsIP(ip))
        //    {
        //        return ip;
        //    }
        //    else
        //    {
        //        return "-1";
        //    }
        //}
        #endregion

        #region 检查设置的端口号是否正确,返回正确的端口号
        ///


        /// 检查设置的端口号是否正确,并返回正确的端口号,无效端口号返回-1。
        ///

        /// 设置的端口号       
        public static int GetValidPort(string port)
        {
            //声明返回的正确端口号
            int validPort = -1;
            //最小有效端口号
            const int MINPORT = 0;
            //最大有效端口号
            const int MAXPORT = 65535;

            //检测端口号
            try
            {
                //传入的端口号为空则抛出异常
                if (port == "")
                {
                    throw new Exception("端口号不能为空!");
                }

                //检测端口范围
                if ((Convert.ToInt32(port) MAXPORT))
                {
                    throw new Exception("端口号范围无效!");
                }

                //为端口号赋值
                validPort = Convert.ToInt32(port);
            }
            catch (Exception ex)
            {
                string errMessage = ex.Message;
            }
            return validPort;
        }
        #endregion

        #region 将字符串形式的IP地址转换成IPAddress对象
        ///


        /// 将字符串形式的IP地址转换成IPAddress对象
        ///

        /// 字符串形式的IP地址       
        public static IPAddress StringToIPAddress(string ip)
        {
            return IPAddress.Parse(ip);
        }
        #endregion

        #region 获取本机的计算机名
        ///


        /// 获取本机的计算机名
        ///

        public static string LocalHostName
        {
            get
            {
                return Dns.GetHostName();
            }
        }
        #endregion

        #region 获取本机的局域网IP
        ///


        /// 获取本机的局域网IP
        ///
       
        public static string LANIP
        {
            get
            {
                //获取本机的IP列表,IP列表中的第一项是局域网IP,第二项是广域网IP
                IPAddress[] addressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList;

                //如果本机IP列表为空,则返回空字符串
                if (addressList.Length <1)
                {
                    return "";
                }

                //返回本机的局域网IP
                return addressList[0].ToString();
            }
        }
        #endregion

        #region 获取本机在Internet网络的广域网IP
        ///


        /// 获取本机在Internet网络的广域网IP
        ///
       
        public static string WANIP
        {
            get
            {
                //获取本机的IP列表,IP列表中的第一项是局域网IP&#xff0c;第二项是广域网IP
                IPAddress[] addressList &#61; Dns.GetHostEntry(Dns.GetHostName()).AddressList;

                //如果本机IP列表小于2&#xff0c;则返回空字符串
                if (addressList.Length <2)
                {
                    return "";
                }

                //返回本机的广域网IP
                return addressList[1].ToString();
            }
        }
        #endregion

        #region 获取远程客户机的IP地址
        ///


        /// 获取远程客户机的IP地址
        ///

        /// 客户端的socket对象       
        public static string GetClientIP(Socket clientSocket)
        {
            IPEndPoint client &#61; (IPEndPoint)clientSocket.RemoteEndPoint;
            return client.Address.ToString();
        }
        #endregion

        #region 创建一个IPEndPoint对象
        ///


        /// 创建一个IPEndPoint对象
        ///

        /// IP地址
        /// 端口号       
        public static IPEndPoint CreateIPEndPoint(string ip, int port)
        {
            IPAddress ipAddress &#61; StringToIPAddress(ip);
            return new IPEndPoint(ipAddress, port);
        }
        #endregion

        #region 创建一个TcpListener对象
        ///


        /// 创建一个自动分配IP和端口的TcpListener对象
        ///
       
        public static TcpListener CreateTcpListener()
        {
            //创建一个自动分配的网络节点
            IPAddress ipAddress &#61; IPAddress.Any;
            IPEndPoint localEndPoint &#61; new IPEndPoint(ipAddress, 0);

            return new TcpListener(localEndPoint);
        }
        ///


        /// 创建一个TcpListener对象
        ///

        /// IP地址
        /// 端口       
        public static TcpListener CreateTcpListener(string ip, int port)
        {
            //创建一个网络节点
            IPAddress ipAddress &#61; StringToIPAddress(ip);
            IPEndPoint localEndPoint &#61; new IPEndPoint(ipAddress, port);

            return new TcpListener(localEndPoint);
        }
        #endregion

        #region 创建一个基于TCP协议的Socket对象
        ///


        /// 创建一个基于TCP协议的Socket对象
        ///
       
        public static Socket CreateTcpSocket()
        {
            return new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        }
        #endregion

        #region 创建一个基于UDP协议的Socket对象
        ///


        /// 创建一个基于UDP协议的Socket对象
        ///
       
        public static Socket CreateUdpSocket()
        {
            return new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        }
        #endregion

        #region 获取本地终结点

        #region 获取TcpListener对象的本地终结点
        ///


        /// 获取TcpListener对象的本地终结点
        ///

        /// TcpListener对象       
        public static IPEndPoint GetLocalPoint(TcpListener tcpListener)
        {
            return (IPEndPoint)tcpListener.LocalEndpoint;
        }

        ///


        /// 获取TcpListener对象的本地终结点的IP地址
        ///

        /// TcpListener对象       
        public static string GetLocalPoint_IP(TcpListener tcpListener)
        {
            IPEndPoint localEndPoint &#61; (IPEndPoint)tcpListener.LocalEndpoint;
            return localEndPoint.Address.ToString();
        }

        ///


        /// 获取TcpListener对象的本地终结点的端口号
        ///

        /// TcpListener对象       
        public static int GetLocalPoint_Port(TcpListener tcpListener)
        {
            IPEndPoint localEndPoint &#61; (IPEndPoint)tcpListener.LocalEndpoint;
            return localEndPoint.Port;
        }
        #endregion

        #region 获取Socket对象的本地终结点
        ///


        /// 获取Socket对象的本地终结点
        ///

        /// Socket对象       
        public static IPEndPoint GetLocalPoint(Socket socket)
        {
            return (IPEndPoint)socket.LocalEndPoint;
        }

        ///


        /// 获取Socket对象的本地终结点的IP地址
        ///

        /// Socket对象       
        public static string GetLocalPoint_IP(Socket socket)
        {
            IPEndPoint localEndPoint &#61; (IPEndPoint)socket.LocalEndPoint;
            return localEndPoint.Address.ToString();
        }

        ///


        /// 获取Socket对象的本地终结点的端口号
        ///

        /// Socket对象       
        public static int GetLocalPoint_Port(Socket socket)
        {
            IPEndPoint localEndPoint &#61; (IPEndPoint)socket.LocalEndPoint;
            return localEndPoint.Port;
        }
        #endregion

        #endregion

        #region 绑定终结点
        ///


        /// 绑定终结点
        ///

        /// Socket对象
        /// 要绑定的终结点
        public static void BindEndPoint(Socket socket, IPEndPoint endPoint)
        {
            if (!socket.IsBound)
            {
                socket.Bind(endPoint);
            }
        }

        ///


        /// 绑定终结点
        ///

        /// Socket对象       
        /// 服务器IP地址
        /// 服务器端口
        public static void BindEndPoint(Socket socket, string ip, int port)
        {
            //创建终结点
            IPEndPoint endPoint &#61; CreateIPEndPoint(ip, port);

            //绑定终结点
            if (!socket.IsBound)
            {
                socket.Bind(endPoint);
            }
        }
        #endregion

        #region 指定Socket对象执行监听
        ///


        /// 指定Socket对象执行监听&#xff0c;默认允许的最大挂起连接数为100
        ///

        /// 执行监听的Socket对象
        /// 监听的端口号
        public static void StartListen(Socket socket, int port)
        {
            //创建本地终结点
            IPEndPoint localPoint &#61; CreateIPEndPoint(NetHelper.LocalHostName, port);

            //绑定到本地终结点
            BindEndPoint(socket, localPoint);

            //开始监听
            socket.Listen(100);
        }

        ///


        /// 指定Socket对象执行监听
        ///

        /// 执行监听的Socket对象
        /// 监听的端口号
        /// 允许的最大挂起连接数
        public static void StartListen(Socket socket, int port, int maxConnection)
        {
            //创建本地终结点
            IPEndPoint localPoint &#61; CreateIPEndPoint(NetHelper.LocalHostName, port);

            //绑定到本地终结点
            BindEndPoint(socket, localPoint);

            //开始监听
            socket.Listen(maxConnection);
        }

        ///


        /// 指定Socket对象执行监听
        ///

        /// 执行监听的Socket对象
        /// 监听的IP地址
        /// 监听的端口号
        /// 允许的最大挂起连接数
        public static void StartListen(Socket socket, string ip, int port, int maxConnection)
        {
            //绑定到本地终结点
            BindEndPoint(socket, ip, port);

            //开始监听
            socket.Listen(maxConnection);
        }
        #endregion

        #region 连接到基于TCP协议的服务器
        ///


        /// 连接到基于TCP协议的服务器,连接成功返回true&#xff0c;否则返回false
        ///

        /// Socket对象
        /// 服务器IP地址
        /// 服务器端口号    
        public static bool Connect(Socket socket, string ip, int port)
        {
            try
            {
                //连接服务器
                socket.Connect(ip, port);

                //检测连接状态
                return socket.Poll(-1, SelectMode.SelectWrite);
            }
            catch (SocketException ex)
            {
                throw new Exception(ex.Message);
                //LogHelper.WriteTraceLog(TraceLogLevel.Error, ex.Message);
            }
        }
        #endregion

        #region 以同步方式发送消息
        ///


        /// 以同步方式向指定的Socket对象发送消息
        ///

        /// socket对象
        /// 发送的消息
        public static void SendMsg(Socket socket, byte[] msg)
        {
            //发送消息
            socket.Send(msg, msg.Length, SocketFlags.None);
        }

        ///


        /// 使用UTF8编码格式以同步方式向指定的Socket对象发送消息
        ///

        /// socket对象
        /// 发送的消息
        public static void SendMsg(Socket socket, string msg)
        {
            //将字符串消息转换成字符数组
            byte[] buffer &#61; ConvertHelper.StringToBytes(msg, Encoding.Default);

            //发送消息
            socket.Send(buffer, buffer.Length, SocketFlags.None);
        }
        #endregion

        #region 以同步方式接收消息
        ///


        /// 以同步方式接收消息
        ///

        /// socket对象
        /// 接收消息的缓冲区
        public static void ReceiveMsg(Socket socket, byte[] buffer)
        {
            socket.Receive(buffer);
        }

        ///


        /// 以同步方式接收消息&#xff0c;并转换为UTF8编码格式的字符串,使用5000字节的默认缓冲区接收。
        ///

        /// socket对象       
        public static string ReceiveMsg(Socket socket)
        {
            //定义接收缓冲区
            byte[] buffer &#61; new byte[5000];
            //接收数据&#xff0c;获取接收到的字节数
            int receiveCount &#61; socket.Receive(buffer);

            //定义临时缓冲区
            byte[] tempBuffer &#61; new byte[receiveCount];
            //将接收到的数据写入临时缓冲区
            Buffer.BlockCopy(buffer, 0, tempBuffer, 0, receiveCount);
            //转换成字符串&#xff0c;并将其返回
            return ConvertHelper.BytesToString(tempBuffer, Encoding.Default);
        }
        #endregion

        #region 关闭基于Tcp协议的Socket对象
        ///


        /// 关闭基于Tcp协议的Socket对象
        ///

        /// 要关闭的Socket对象
        public static void Close(Socket socket)
        {
            try
            {
                //禁止Socket对象接收和发送数据
                socket.Shutdown(SocketShutdown.Both);
            }
            catch (SocketException ex)
            {
                throw ex;
            }
            finally
            {
                //关闭Socket对象
                socket.Close();
            }
        }
        #endregion

        #region 发送电子邮件
        ///


        /// 发送电子邮件,所有SMTP配置信息均在config配置文件中system.net节设置.
        ///

        /// 接收电子邮件的地址
        /// 电子邮件的标题
        /// 电子邮件的正文
        /// 是否开启SSL
        public static bool SendEmail(string receiveEmail, string msgSubject, string msgBody, bool IsEnableSSL)
        {
            //创建电子邮件对象
            MailMessage email &#61; new MailMessage();
            //设置接收人的电子邮件地址
            email.To.Add(receiveEmail);
            //设置邮件的标题
            email.Subject &#61; msgSubject;
            //设置邮件的正文
            email.Body &#61; msgBody;
            //设置邮件为HTML格式
            email.IsBodyHtml &#61; true;

            //创建SMTP客户端&#xff0c;将自动从配置文件中获取SMTP服务器信息
            SmtpClient smtp &#61; new SmtpClient();
            //开启SSL
            smtp.EnableSsl &#61; IsEnableSSL;

            try
            {
                //发送电子邮件
                smtp.Send(email);

                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion
    }
}

转:https://www.cnblogs.com/dingxiaowei/archive/2012/10/26/3058791.html



推荐阅读
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 精讲代理设计模式
    代理设计模式为其他对象提供一种代理以控制对这个对象的访问。代理模式实现原理代理模式主要包含三个角色,即抽象主题角色(Subject)、委托类角色(被代理角色ÿ ... [详细]
author-avatar
秘密不能说雨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有