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

简介: 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();
        }
    }
}

相关文章
|
3天前
|
API PHP 数据安全/隐私保护
IMAP邮箱API接收收取邮件的方法和步骤
IMAP邮箱API是用于自动接收和管理邮件的接口,允许程序无须手动登录即可操作邮件。要使用它,需先配置邮箱允许API访问,选择如Python的imaplib或PHP的imap扩展等IMAP库,然后连接到邮箱服务器,接收和处理邮件。处理完毕后断开连接。AokSend提供高效发信服务,支持SMTP/API接口。使用IMAP API能提升邮件管理效率。
|
1月前
调用阿里云接口实现短信消息的发送源码——CSDN博客
调用阿里云接口实现短信消息的发送源码——CSDN博客
50 0
|
JavaScript
nodejs自动接收新邮件进行处理
通过imap 来接收邮箱新邮件,类似客户端系列,不过比较简单的,目前只有新邮件,后续也可以通过这个来做一个自己的邮件客户端。
nodejs自动接收新邮件进行处理
|
Java Maven
java实现发送接收邮件的功能(详细代码步骤和jar包)
可以通过java代码发送A邮箱发送到B邮箱。
329 0
java实现发送接收邮件的功能(详细代码步骤和jar包)
|
C#
jmail + c#实现邮件的接收
jmail + c#实现邮件的接收
159 0
|
Java API 开发工具
测试离线消息的接收以及回调的注册
1. 离线消息接收需要哪些条件. 2. 为什么有时候离线消息不能进全局回调.
298 0
测试离线消息的接收以及回调的注册
|
Android开发 开发工具
极光推送(二)接收通知
步骤(分为两步) 一.设置通知栏样式(如果不设置则默认使用自带的),这里官方给了三种方式: 1.基础(定制声音、震动、闪灯等 Notification 样式): BasicPushNotificationBuilder builder = new BasicPushNotificationBuilder(MainActivity.
1420 0