CSDN博客

img chenli985

C#实现手机发短信

发表于2008/9/30 10:38:00  4614人阅读

 using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.IO.Ports;

namespace WFSS
{
    public struct SendNoteInformation
    {
        public string COMPort;

        public int COMbaudRate;
        public string COMparity;
        public int COMdataBits;
        public int COMstopBits;
     
        public string[] SendArray;
        public string NoteContent;
    }

    public class sendNoteClass : alarmInterface
    {
        private Thread thdSubThread = null;       
        private SendNoteInformation IsendNoteInformation;

        private SerialPort comPort;
        public SerialPort FcomPort
        {
            get { return comPort; }
            set { comPort = value; }
        }

        private object[] alarmInfo;
        public object[] FalarmInfo
        {
            get { return alarmInfo; }
            set { alarmInfo = value; }
        }

        /// <summary>
        /// 初始化手机发送短信设置
        /// </summary>
        /// <param name="Ivalue"> </param>
        public sendNoteClass(object[] Ivalue)
        {
            this.FalarmInfo = Ivalue;

            IsendNoteInformation = new SendNoteInformation();
            string[] COMInformation = Ivalue[0].ToString().Split(';');
            IsendNoteInformation.COMPort = COMInformation[0];
            string[] COMSetting = COMInformation[1].Split(',');
            IsendNoteInformation.COMbaudRate = int.Parse(COMSetting[0]);
            IsendNoteInformation.COMparity = COMSetting[1];
            IsendNoteInformation.COMdataBits = int.Parse(COMSetting[2]);
            IsendNoteInformation.COMstopBits = int.Parse(COMSetting[3]);

            IsendNoteInformation.SendArray = Ivalue[1].ToString().Split(';');

            this.FcomPort = new SerialPort(IsendNoteInformation.COMPort);
            this.FcomPort.BaudRate = IsendNoteInformation.COMbaudRate;
            switch (IsendNoteInformation.COMparity)
            {
                case "n":
                    this.FcomPort.Parity = Parity.None;
                    break;
                case "e":
                    this.FcomPort.Parity = Parity.Even;
                    break;
                default:
                    break;
            }

            this.FcomPort.DataBits = IsendNoteInformation.COMdataBits;
            switch (IsendNoteInformation.COMstopBits)
            {
                case 1:
                    this.FcomPort.StopBits = StopBits.One;
                    break;
                case 2:
                    this.FcomPort.StopBits = StopBits.Two;
                    break;
                default:
                    break;
            }
        }

        /// <summary>
        /// 转换电话号码
        /// </summary>
        /// <param name="IoriginNo"> </param>
        /// <returns> </returns>
        private string EtrunPhoneNo(string IoriginNo)
        {
            string ResultPhoneNo = "";
            string[] ImidStr = new string[14];
            IoriginNo = "86" + IoriginNo + "F";                            //加上国家码,不够偶数位补F
            for (int i = 0; i < 14; i++)                                  //分解号码
            {
                ImidStr[i] = IoriginNo.Substring(i, 1);
            }

            for (int i = 0; i < 14; i++)
            {
                if (i % 2 == 0) ResultPhoneNo += ImidStr[i + 1] + ImidStr[i];
            }
            ResultPhoneNo = "0011000d91" + ResultPhoneNo + "0008a7";      //PDU格式写死就好

            return ResultPhoneNo;
        }

        /// <summary>
        /// 字符串转换unicode
        /// </summary>
        /// <param name="strEncode"> </param>
        /// <returns> </returns>
        public static string Encode(string strEncode)
        {
            string strReturn = "";//  存储转换后的编码
            foreach (short shortx in strEncode.ToCharArray())
            {
                strReturn += shortx.ToString("X4");
            }
            return strReturn;
        }

        /// <summary>
        /// 发送手机短信
        /// </summary>
        /// <param name="IsendPhoneNo"> </param>
        /// <param name="IsendContent"> </param>
        private void EsendNote(SendNoteInformation Ivalue, SerialPort Iport)
        {           
            string IunicodeContent = Encode(Ivalue.NoteContent + "/r/n");

            if (IunicodeContent.Length > 240) IunicodeContent.Remove(240);

            int IphoneNoLength = (15 + IunicodeContent.Length / 2);
            string strLength = Convert.ToString(IunicodeContent.Length / 2, 16);

            if (!Iport.IsOpen) Iport.Open();

            foreach (string IphoneNo in Ivalue.SendArray)
            {
                if (!string.IsNullOrEmpty(IphoneNo))
                {
                    string IturnPhoenNo = EtrunPhoneNo(IphoneNo);
                    string Inote = "AT+CMGS=" + IphoneNoLength.ToString() + (char)13;

                    Iport.Write(Inote);
                    System.Threading.Thread.Sleep(1000);
                    string Istr = IturnPhoenNo + strLength + IunicodeContent + (char)26;
                    Iport.Write(Istr);
                    System.Threading.Thread.Sleep(1000);
                }
            }

            Iport.Close(); 
        }

        /// <summary>
        /// 报警线程调用
        /// </summary>
        /// <param name="Ivalue"> </param>
        void alarmInterface.Ealarm(object[] Ivalue)
        {
            if (FalarmInfo == null || Ivalue == null) return;

            IsendNoteInformation.NoteContent = Ivalue[0].ToString();

            thdSubThread = new Thread(new ThreadStart(EsubThread));
            thdSubThread.Start(); 
        }

        /// <summary>
        /// 停止报警
        /// </summary>
        void alarmInterface.Estop()
        {
            if (thdSubThread != null) thdSubThread.Abort();
        }

        /// <summary>
        /// 发送邮件报警
        /// </summary>
        private void EsubThread()
        {
            try
            {
                EsendNote(this.IsendNoteInformation, this.FcomPort);
            }
            catch
            {
                throw;
            }
            finally
            {
                thdSubThread.Abort();
                GC.SuppressFinalize(this);
            }
        }

        /// <summary>
        /// 记录报警信息
        /// </summary>
        /// <param name="Ivalue"> </param>
        void alarmInterface.ErecordAlarmInfo(string Ivalue)
        {
           
        }
    }
}
阅读全文
0 0

相关文章推荐

img
取 消
img