利用短信猫接收短信控制台程序

简介: using System;using System.Collections.Generic;using System.

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

namespace SYGSM
{
    class GsmClass
    {
        /// <summary>
        /// GetMessage函数用于读取SIM卡中的短信
        /// </summary>
        /// <param name="wz">短信位置</param>
        public static string[] GetMessage(string comn,int wz,bool delyn)
        {
            //定义短信端口操作类
            SerialPort serialPort = new SerialPort("COM" + comn.ToString(), 9600, Parity.None, 8, StopBits.One);
            serialPort.WriteTimeout = 2000;

            try
            {
                //设置读缓冲区大小
                serialPort.ReadBufferSize = 900000;
                if (serialPort.IsOpen == false)
                    serialPort.Open();

                //向串口发出命令,清空以前的操作
                serialPort.WriteLine("ATZ/r");
                //延时1秒等待,串口操作完成
                Thread.Sleep(1000);
                //发出读取指定位置的短信的命令
                serialPort.ReadExisting();
                serialPort.WriteLine("AT+CMGR=" + wz.ToString() + "/r");
                //延时1秒等待,串口操作完成
                Thread.Sleep(2000);
                //取得返回值(包含短信内容的字符串)
                string x3 = serialPort.ReadExisting();

                //向串口发出命令,删除已经被读取的短信
                if (delyn)
                {
                    //延时2秒等待,串口操作完成
                    Thread.Sleep(200);
                    serialPort.WriteLine("AT+CMGD=" + wz.ToString() + "/r/n");
                }
                Thread.Sleep(200);
                //关闭端口
                serialPort.Close();

                //分析字符串,得到短信内容中的需要的数据
                string[] tmps = x3.Split('/n');
                string mess = "";
                for (int j = 3; j < tmps.Length -3 ; j++)
                {
                    mess +=(mess==""?"":"/n/r")+tmps[j];
                }

                 //tmps[2]短信信息
                tmps[2] = tmps[2].Substring(tmps[2].IndexOf(':') + 1).Trim();
                string[] dxxxlist = GetSplitEx(tmps[2], ',', '"');
                if (dxxxlist.Length < 4) return new string[3] { "", "", "" };

                List<string> ls = new List<string>();
                ls.Add(dxxxlist[1]);
                ls.Add(dxxxlist[3]);
                ls.Add(mess);
                return ls.ToArray();
            }
            catch (Exception e1)
            {
                Console.WriteLine(e1.Message);
                return new string[3]{"","",""};
            }
            finally
            {
                //保证操作完成以后关闭端口,避免占用
                if (serialPort.IsOpen)
                    serialPort.Close();
            }
        }

        public static string[] GetSplitEx(string str,char splitchar,char signchar)
        {
            List<string> ls = new List<string>();

            if (str==null||str.Length==0) return new string[1]{""};

            while (true)
            {
                int startwz = 0; //开始找找分隔符位置
                bool splityn = false;//是否找到分隔符
                bool signyn = false; //是否以格式符开始
                int wz = 0;//分隔符位置
                string dxxx = "";//本次内容

                signyn = (str.IndexOf(signchar)==0);//是否以格式符开始
                startwz = (signyn ? (str.IndexOf(signchar, 1) < 0 ? 0 : str.IndexOf(signchar, 1)) : 0);
                splityn = (str.IndexOf(splitchar, startwz) >= 0);
                wz = (splityn?str.IndexOf(splitchar, startwz):str.Length);
                dxxx = str.Substring(0, wz);
                ls.Add(((signyn && dxxx[dxxx.Length - 1] == signchar) ? dxxx.Substring(1, dxxx.Length - 2) : dxxx));
                //Console.WriteLine(ls[ls.Count - 1]);
                if (!splityn) break;
                str = str.Substring(wz + 1);
            }
            return ls.ToArray();
        }

        static void Main(string[] args)
        {
            //

            string[] mess = GsmClass.GetMessage("3", 1, false);
            Console.WriteLine("发 送 者:" + mess[0]);
            Console.WriteLine("发送时间:" + mess[1]);
            Console.WriteLine("短信内容:" + mess[2]);
            Console.ReadLine();
        }
    }
}

相关文章
|
2月前
|
Web App开发 Shell Linux
MacOS环境-手写操作系统-41-mem 第一个控制台程序
MacOS环境-手写操作系统-41-mem 第一个控制台程序
17 1
用c语言输出有颜色的字体 printf输出 控制台程序修改文本位置 设置控制台程序窗口标题
用c语言输出有颜色的字体 printf输出 控制台程序修改文本位置 设置控制台程序窗口标题
|
7月前
|
NoSQL 开发工具 数据库
基于Python开发的学生信息管理系统控制台程序(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
基于Python开发的学生信息管理系统控制台程序(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
|
7月前
|
Java 开发工具 数据安全/隐私保护
java商品采购管理系统控制台程序
java商品采购管理系统控制台程序
Visual Studio 2019 设置程序结束控制台不关闭
修改设置使控制台应用运行结束,控制台不自动退出。
492 0
Visual Studio 2019 设置程序结束控制台不关闭
|
Windows
【错误记录】Windows 控制台程序编译报错 ( WINDOWS.H already included. MFC apps must not #include <Windows.h> )
【错误记录】Windows 控制台程序编译报错 ( WINDOWS.H already included. MFC apps must not #include <Windows.h> )
911 0
【错误记录】Windows 控制台程序编译报错 ( WINDOWS.H already included. MFC apps must not #include <Windows.h> )
|
监控 安全 API
阿里云短信服务控制台发送记录查询操作示例
短信服务(Short Message Service)是广大企业客户快速触达手机用户所优选使用的通信能力。调用API或用群发助手,即可发送验证码、通知类和营销类短信;国内验证短信秒级触达,到达率最高可达99%;国际/港澳台短信覆盖200多个国家和地区,安全稳定,接入便捷,智能监控调度广受出海企业选用。客户在使用服务后,往往有查询发送记录的需求。短信发送后可通过短信服务控制台查询短信发送记录和详细信息。但查询记录页面仅支持查询最近6个月的单日发送明细,如果需要更长时间段的发送明细,就需要使用导出功能。导出功能支持导出近三年的数据,但是一些客户通常不知这隐藏操作。本文快速演示下导出操作,以供参考。
1516 0
阿里云短信服务控制台发送记录查询操作示例
|
C#
C# 判断当前控制台程序是否重复运行
C# 判断当前控制台程序是否重复运行
168 0
|
C# C++ Windows
C#工程中输出类型转换以及程序运行后控制台窗口不退出设置
C#工程中输出类型转换以及程序运行后控制台窗口不退出设置
385 0
C#工程中输出类型转换以及程序运行后控制台窗口不退出设置