博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[网络] C# NetHelper网络通信编程类教程与源码下载
阅读量:5018 次
发布时间:2019-06-12

本文共 13229 字,大约阅读时间需要 44 分钟。

主要功能如下所示

    • 检查设置的IP地址是否正确,返回正确的IP地址
    • 检查设置的端口号是否正确,返回正确的端口号
    • 将字符串形式的IP地址转换成IPAddress对象
    • 获取本机的计算机名
    • 获取本机的局域网IP
    • 获取本机在Internet网络的广域网IP
    • 获取远程客户机的IP地址
    • 创建一个IPEndPoint对象
    • 创建一个TcpListener对象
    • 创建一个基于TCP协议的Socket对象
    • 创建一个基于UDP协议的Socket对象
    • 获取本地终结点(获取TcpListener对象的本地终结点,获取Socket对象的本地终结点)
    • 绑定终结点
    • 指定Socket对象执行监听
    • 连接到基于TCP协议的服务器
    • 以同步方式发送消息
    • 以同步方式接收消息
    • 闭基于Tcp协议的Socket对象
    • 发送电子邮件

 

/// /// 类说明:NetHelper/// 编 码 人:苏飞/// 联系方式:361983679  /// 更新网站:[url=http://www.sufeinet.com/thread-655-1-1.html]http://www.sufeinet.com/thread-655-1-1.html[/url]/// 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) < MINPORT) || (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,第二项是广域网IP                IPAddress[] addressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList;                 //如果本机IP列表小于2,则返回空字符串                if (addressList.Length < 2)                {                    return "";                }                 //返回本机的广域网IP                return addressList[1].ToString();            }        }        #endregion         #region 获取远程客户机的IP地址        ///         /// 获取远程客户机的IP地址        ///         /// 客户端的socket对象                public static string GetClientIP(Socket clientSocket)        {            IPEndPoint client = (IPEndPoint)clientSocket.RemoteEndPoint;            return client.Address.ToString();        }        #endregion         #region 创建一个IPEndPoint对象        ///         /// 创建一个IPEndPoint对象        ///         /// IP地址        /// 端口号                public static IPEndPoint CreateIPEndPoint(string ip, int port)        {            IPAddress ipAddress = StringToIPAddress(ip);            return new IPEndPoint(ipAddress, port);        }        #endregion         #region 创建一个TcpListener对象        ///         /// 创建一个自动分配IP和端口的TcpListener对象        ///                 public static TcpListener CreateTcpListener()        {            //创建一个自动分配的网络节点            IPAddress ipAddress = IPAddress.Any;            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 0);             return new TcpListener(localEndPoint);        }        ///         /// 创建一个TcpListener对象        ///         /// IP地址        /// 端口                public static TcpListener CreateTcpListener(string ip, int port)        {            //创建一个网络节点            IPAddress ipAddress = StringToIPAddress(ip);            IPEndPoint localEndPoint = 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 = (IPEndPoint)tcpListener.LocalEndpoint;            return localEndPoint.Address.ToString();        }         ///         /// 获取TcpListener对象的本地终结点的端口号        ///         /// TcpListener对象                public static int GetLocalPoint_Port(TcpListener tcpListener)        {            IPEndPoint localEndPoint = (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 = (IPEndPoint)socket.LocalEndPoint;            return localEndPoint.Address.ToString();        }         ///         /// 获取Socket对象的本地终结点的端口号        ///         /// Socket对象                public static int GetLocalPoint_Port(Socket socket)        {            IPEndPoint localEndPoint = (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 = CreateIPEndPoint(ip, port);             //绑定终结点            if (!socket.IsBound)            {                socket.Bind(endPoint);            }        }        #endregion         #region 指定Socket对象执行监听        ///         /// 指定Socket对象执行监听,默认允许的最大挂起连接数为100        ///         /// 执行监听的Socket对象        /// 监听的端口号        public static void StartListen(Socket socket, int port)        {            //创建本地终结点            IPEndPoint localPoint = CreateIPEndPoint(NetHelper.LocalHostName, port);             //绑定到本地终结点            BindEndPoint(socket, localPoint);             //开始监听            socket.Listen(100);        }         ///         /// 指定Socket对象执行监听        ///         /// 执行监听的Socket对象        /// 监听的端口号        /// 允许的最大挂起连接数        public static void StartListen(Socket socket, int port, int maxConnection)        {            //创建本地终结点            IPEndPoint localPoint = 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,否则返回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 = 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);        }         ///         /// 以同步方式接收消息,并转换为UTF8编码格式的字符串,使用5000字节的默认缓冲区接收。        ///         /// socket对象                public static string ReceiveMsg(Socket socket)        {            //定义接收缓冲区            byte[] buffer = new byte[5000];            //接收数据,获取接收到的字节数            int receiveCount = socket.Receive(buffer);             //定义临时缓冲区            byte[] tempBuffer = new byte[receiveCount];            //将接收到的数据写入临时缓冲区            Buffer.BlockCopy(buffer, 0, tempBuffer, 0, receiveCount);            //转换成字符串,并将其返回            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 = new MailMessage();            //设置接收人的电子邮件地址            email.To.Add(receiveEmail);            //设置邮件的标题            email.Subject = msgSubject;            //设置邮件的正文            email.Body = msgBody;            //设置邮件为HTML格式            email.IsBodyHtml = true;             //创建SMTP客户端,将自动从配置文件中获取SMTP服务器信息            SmtpClient smtp = new SmtpClient();            //开启SSL            smtp.EnableSsl = IsEnableSSL;             try            {                //发送电子邮件                smtp.Send(email);                 return true;            }            catch (Exception ex)            {                throw ex;            }        }         #endregion    }}

 

 

 

转载于:https://www.cnblogs.com/lizeyan/p/3635714.html

你可能感兴趣的文章
easyui源码翻译1.32--Dialog(对话框窗口)
查看>>
阿里架构师,讲述基于微服务的软件架构模式
查看>>
Eclipse导入maven项目时,Pom.xml文件报错处理方法
查看>>
01、JAVA开发准备
查看>>
asp.net mvc 错误处理 - 自定义报错处理,生成错误日志
查看>>
Linux centos ssh
查看>>
R语言之避免for循环示例
查看>>
[转]jQuery 选择器和dom操作
查看>>
Jenkins+Maven+SVN快速搭建持续集成环境(转)
查看>>
bootstrap 媒体查询
查看>>
杜教筛
查看>>
《Ext JS模板与组件基本知识框架图----模板》
查看>>
txmpp
查看>>
微信开发时调用jssdk,在安卓设备中成功调用;在ios设备中返回错误消息:config fail,无其他具体错误消息,且接口权限显示获取ok,无法调用...
查看>>
【Github教程】史上最全github使用方法:github入门到精通
查看>>
抽象工厂模式(Abstract Factory)
查看>>
luogu1373 小a和uim之大逃离 (dp)
查看>>
Redis的Pub/Sub客户端实现
查看>>
DirectFB 之 动画播放初步
查看>>
SQL日常问题和技巧——持续更新
查看>>