⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sgiphelper.cs

📁 联通的SGIP发送代码
💻 CS
字号:
/* jll(2005)版权所有,保留所有权力
 * 文件名:SgipHelper.cs
 * 用  途:这个文件提供一些helper函数以供其它地方调用
 * 作  者:jll
 * 完成日期:2005年8月2日
 * 修订记录:
 */

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Reflection;

using System.Text.RegularExpressions;
using System.Net;
using System.Net.Sockets;
using System.Xml.Serialization;

namespace JLL.SGIP
{
    public class SgipHelper
    {
        /// <summary>
        /// 将一个byte[]转为ascii字符串,当读到\0时就返回
        /// </summary>
        /// <param name="buffer"></param>
        /// <param name="nIndex"></param>
        /// <param name="nCount"></param>
        /// <returns></returns>
        public static string GetASCIIString(byte[] buffer, int nIndex, int nCount)
        {
            StringBuilder result = new StringBuilder(nCount);
            for (int i = 0; i < nCount; ++i)
            {
                if (buffer[nIndex + i] == '\0')
                    break;
                result.Append((char)buffer[nIndex + i]);
            }
            return result.ToString();
        }

        /// <summary>
        /// Socket操作超时
        /// </summary>
        public const int SocketTimeOut = 10060;

        /// <summary>
        /// 返回当前assembly所在的路径
        /// </summary>
        /// <returns></returns>
        public static string GetCurrentAssemblyPath()
        {
            return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + Path.DirectorySeparatorChar;
        }

        /// <summary>
        /// 如果一个字符串所占用的字节数超过限额,就抛出异常
        /// </summary>
        /// <param name="strValue"></param>
        /// <param name="maxBytes"></param>
        public static void CheckMaxBytes(string strValue, int maxBytes)
        {
            if (Encoding.ASCII.GetBytes(strValue).Length > maxBytes)
            {
                throw new Exception(string.Format("字符最多只能有{0}个字节", maxBytes));
            }
        }

        public static void CheckMaxBytes(byte[] buffer, int maxBytes)
        {
            if (buffer.Length > maxBytes)
            {
                throw new Exception(string.Format("最多只能有{0}个字节!", maxBytes));
            }
        }

        /// <summary>
        /// 判断一个字符串是否为手机号码(前号未加86等前缀的手机号码)
        /// </summary>
        public static bool IsNoPrefixMobileNumber(string strMobileNumber)
        {
            return Regex.IsMatch(strMobileNumber, @"^13\d{9}", RegexOptions.None);
        }

        /// <summary>
        /// 判断一个字符串是否为未加前缀的手机号码,如果是则返回“86+输入", 否则返回输入的内容
        /// </summary>
        /// <param name="strMobileNumber"></param>
        /// <returns></returns>
        public static string Prefix86ForMobilbeNumber(string strMobileNumber)
        {
            return IsNoPrefixMobileNumber(strMobileNumber) ? ("86" + strMobileNumber) : strMobileNumber;
        }

        /// <summary>
        /// 判断一个sokcet连接与否, 注意:这种方法来判断依然有bug,在某种情况下它将失效
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static bool IsSocketConnected(Socket s)
        {
            if (s.Connected)
            {
                try
                {
                    byte[] byteSend = new byte[0];
                    s.Send(byteSend);
                }
                catch
                {
                }
            }
            return s.Connected;
        }

        /// <summary>
        /// 先禁止socket的收、发,再关闭socket, 不会抛出异常!
        /// </summary>
        /// <param name="s"></param>
        public static void ShutdownAndCloseSocket(Socket s)
        {
            try
            {
                s.Shutdown(SocketShutdown.Both);
                s.Close();
            }catch{
            }
        }

        /// <summary>
        /// 清空一个存放Command命令的缓冲块
        /// </summary>
        /// <param name="buffer"></param>
        public static void ClearCommandBuffer(byte[] buffer)
        {
            for (int i = 0; i < 8; ++i)
            {
                buffer[i] = 0;
            }
        }

        /// <summary>
        /// 将一个对象序列化到一个xml文件
        /// </summary>
        /// <param name="strXmlFile"></param>
        /// <param name="obj"></param>
        public static void SaveAsXML(string strXmlFile, object obj)
        {
            XmlSerializer xs = new XmlSerializer(obj.GetType());
            using (FileStream fs = new FileStream(strXmlFile, FileMode.OpenOrCreate))
            {
                xs.Serialize(fs, obj);
            }
        }

        /// <summary>
        /// 从xml文件中反序列化
        /// </summary>
        /// <param name="strXmlFile"></param>
        /// <returns></returns>
        public static T LoadFromXmlFile<T>(string strXmlFile)
        {
            XmlSerializer xs = new XmlSerializer(typeof(T));

            object obj = null;
            try
            {
                using (FileStream fs = new FileStream(strXmlFile, FileMode.Open))
                {
                    obj = xs.Deserialize(fs);
                }
            }
            catch
            {
            }
            return (T)obj;
        }

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -