コード例 #1
0
        public PDUData getSms(int id)
        {
            this.Write("AT+CMGR=" + id + endFlag);
            this.ReadTo("AT+CMGR=" + id + endFlag);
            this.ReadTo(endFlag);

            PDUData data = null;
            string  line;

            while (true)
            {
                line = this.ReadTo(endFlag);
                Console.WriteLine(line);

                if (line.StartsWith("OK"))
                {
                    return(data);
                }
                else if (line.StartsWith("ERROR"))
                {
                    throw new Exception("获取短信[" + id + "]失败");
                }
                else if (line.StartsWith("+CMGR:"))
                {
                    line = this.ReadTo(endFlag);
                    Console.WriteLine(line);
                    data = PDUData.parseSmsDeliverPUD(line);
                }
            }
        }
コード例 #2
0
        public static PDUData parseSmsDeliverPUD(string pduStr)
        {
            PDUData data = new PDUData();

            data.pduStr = pduStr;
            try
            {
                string[] charsArray = toCharsArray(pduStr);

                int index = 0;

                int scaLen = Convert.ToInt32(charsArray[index], 16);
                data.sca = charsArray[index] + string.Join("", charsArray, index + 1, scaLen);
                index   += scaLen + 1;
                if (index > charsArray.Length)
                {
                    return(data);
                }

                data.pduType = charsArray[index];
                index       += 1;

                int oaLen = Convert.ToInt32(charsArray[index], 16);
                if (oaLen % 2 == 1)
                {
                    oaLen = (oaLen + 1) / 2 + 1;
                }
                else
                {
                    oaLen = oaLen / 2 + 1;
                }
                data.oa = charsArray[index] + string.Join("", charsArray, index + 1, oaLen);
                index  += oaLen + 1;

                data.pid = charsArray[index];
                index   += 1;

                data.dcs = charsArray[index];
                index   += 1;

                data.scts = string.Join("", charsArray, index, 7);
                index    += 7;

                data.udl = charsArray[index];
                index   += 1;

                int udLen = Convert.ToInt32(data.udl, 16);
                data.ud = string.Join("", charsArray, index, udLen);
                index  += udLen;


                return(data);
            }
            catch (Exception ex)
            {
                return(data);
            }
        }
コード例 #3
0
        private void receiveSms(PDUData pduData)
        {
            log("RECV:[" + pduData.ToString() + "]");
            log("PDUDATA:[" + pduData.getPUDType() + "],[" + pduData.getOA() + "],[" + pduData.getDcs() + "],[" + pduData.getMsg() + "],[" + pduData.getTimeStamp() + "]");
            string saveRs = saveSms(pduData);

            log("入表:" + saveRs);

            form.receiveSms(phoneNum, pduData);
        }
コード例 #4
0
        public void receiveSms(string phoneNum, PDUData pduData)
        {
            DataGridViewRow d = new DataGridViewRow();
            d.CreateCells(dataGridView1, phoneNum, pduData.getOA(), pduData.getTimeStamp(), pduData.getMsg());
            dataGridView1.Rows.Insert(0,d);

            if (dataGridView1.Rows.Count - 1 > 5)
            {
                dataGridView1.Rows.RemoveAt(5);
            }
        }
コード例 #5
0
        public void receiveSms(string phoneNum, PDUData pduData)
        {
            DataGridViewRow d = new DataGridViewRow();

            d.CreateCells(dataGridView1, phoneNum, pduData.getOA(), pduData.getTimeStamp(), pduData.getMsg());
            dataGridView1.Rows.Insert(0, d);

            if (dataGridView1.Rows.Count - 1 > 5)
            {
                dataGridView1.Rows.RemoveAt(5);
            }
        }
コード例 #6
0
        public static PDUData parseSmsDeliverPUD(string pduStr)
        {
            PDUData data = new PDUData();
            data.pduStr = pduStr;
            try
            {
                string[] charsArray = toCharsArray(pduStr);

                int index = 0;

                int scaLen = Convert.ToInt32(charsArray[index], 16);
                data.sca = charsArray[index] + string.Join("", charsArray, index + 1, scaLen);
                index += scaLen + 1;
                if (index > charsArray.Length) return data;

                data.pduType = charsArray[index];
                index += 1;

                int oaLen = Convert.ToInt32(charsArray[index], 16);
                if (oaLen % 2 == 1)
                {
                    oaLen = (oaLen + 1) / 2 + 1;
                }
                else
                {
                    oaLen = oaLen / 2 + 1;
                }
                data.oa = charsArray[index] + string.Join("", charsArray, index + 1, oaLen);
                index += oaLen + 1;

                data.pid = charsArray[index];
                index += 1;

                data.dcs = charsArray[index];
                index += 1;

                data.scts = string.Join("", charsArray, index, 7);
                index += 7;

                data.udl = charsArray[index];
                index += 1;

                int udLen = Convert.ToInt32(data.udl, 16);
                data.ud = string.Join("", charsArray, index, udLen);
                index += udLen;

                return data;
            }
            catch (Exception ex)
            {
                return data;
            }
        }
コード例 #7
0
        private string saveSms(PDUData pduData)
        {
            string sqlstr = "insert into mo_999 (dest,src,cmd,time) values (" +
                            "'" + this.phoneNum + "'"
                            + ",'" + pduData.getOA() + "'"
                            + ",'" + pduData.getMsg() + "'"
                            + ",now())";

            Console.WriteLine("aaaaaaaaaaaaaaaaaaaaaaa" + sqlstr);

            MySQLConnection conn = getConn();
            MySQLCommand    comm = new MySQLCommand(sqlstr, conn);

            comm.ExecuteNonQuery();

            return(sqlstr);
        }
コード例 #8
0
        public ArrayList getAllSms()
        {
            string p = "4";

            if (this.getSmsMode().Equals("1"))
            {
                p = "\"ALL\"";
            }

            this.Write("AT+CMGL=" + p + endFlag);
            this.ReadTo("AT+CMGL=" + p + endFlag);
            this.ReadTo(endFlag);

            ArrayList smsArray = new ArrayList();
            string    line;

            while (true)
            {
                line = this.ReadTo(endFlag);

                if (line.StartsWith("OK"))
                {
                    return(smsArray);
                }
                else if (line.StartsWith("ERROR"))
                {
                    throw new Exception("获取所有短信失败");
                }
                else if (line.StartsWith("+CMGL:"))
                {
                    line = this.ReadTo(endFlag);
                    Console.WriteLine(line);
                    PDUData data = PDUData.parseSmsDeliverPUD(line);
                    smsArray.Add(data);
                }
            }
        }
コード例 #9
0
        public void run(Object threadContext)
        {
            try
            {
                md.open();
                md.openCmdEcho();

                //AT+CPAS
                log("查询设备状态...");
                if (md.getModenState() != 0)
                {
                    log("设备忙,挂断");
                    md.hangsUp();
                }
                log("空闲,重置...");
                md.reset();
                log("重置完毕,检查sim卡...");
                md.checkSimCard();
                log("sim卡正常,设置消息到达格式...");
                md.setSmsReachInfoFormat("1,1,2");
                log("设置消息到达格式完成,设置短信模式");
                md.setSmsMode(0);
                log("设置短信为PDU模式完成。");



                log("获取已有信息...");
                getAllArrivedSms();

                log("等待短信到达中...");
                while (running)
                {
                    try
                    {
                        String line = md.readLien();
                        log("RECV:" + line);
                        if (line.StartsWith("+CMTI:"))
                        {
                            int smsId = int.Parse(line.Replace("+CMTI: \"SM\",", ""));
                            log("收到短信[" + smsId + "],获取中...");

                            PDUData data = md.getSms(smsId);
                            if (data != null)
                            {
                                receiveSms(data);
                            }

                            md.deleteSms(smsId);

                            log("短信[" + smsId + "]已保存,删除...");
                        }


                        Thread.Sleep(500);
                    }
                    catch (TimeoutException ex)
                    {
                        log("等待短信超时,获取已有信息...");
                        getAllArrivedSms();
                    }
                }


                log("正常停止!");
                form.changeThreadState("正常停止!");
            }
            catch (Exception ex)
            {
                log("端口" + md.PortName + "异常:" + ex.Message);
                form.changeThreadState("异常退出!!!");
            }
            finally
            {
                if (md.IsOpen)
                {
                    md.Close();
                }

                log("端口" + md.PortName + "关闭,退出...");
            }
        }
コード例 #10
0
        private string saveSms(PDUData pduData)
        {
            string sqlstr = "insert into mo_999 (dest,src,cmd,time) values (" +
                                "'" + this.phoneNum + "'"
                                + ",'" + pduData.getOA() + "'"
                                + ",'" + pduData.getMsg() + "'"
                                + ",now())";
            Console.WriteLine("aaaaaaaaaaaaaaaaaaaaaaa"+sqlstr);

            MySQLConnection conn = getConn();
            MySQLCommand comm = new MySQLCommand(sqlstr, conn);
            comm.ExecuteNonQuery();

            return sqlstr;
        }
コード例 #11
0
        private void receiveSms(PDUData pduData)
        {
            log("RECV:[" + pduData.ToString() + "]");
            log("PDUDATA:[" + pduData.getPUDType() + "],[" + pduData.getOA() + "],[" + pduData.getDcs()+ "],[" + pduData.getMsg() + "],[" + pduData.getTimeStamp() + "]");
            string saveRs = saveSms(pduData);
            log("����" + saveRs);

            form.receiveSms(phoneNum, pduData);
        }