日期:2014-05-18  浏览次数:21194 次

高分求解决:把短信猫收短信做成了windows服务,发送AT指令,没有返回值,怎么回事,求高手解决?
如题
C# code

//开始
        protected override void OnStart(string[] args)
        {
            uint MobPort = uint.Parse(XmlHelper.GetValue("Config.xml", "port"));
            sp.BaudRate = 9600;
            sp.PortName = "COM" + MobPort.ToString();
            //如果串口已经打开 则先关闭
            if (sp.IsOpen)
                sp.Close();
            sp.Open();
            //初始化设备
            if (sp.IsOpen)
            {

                sp.Write("ATE0\r");
                Thread.Sleep(50);
                sp.Write("AT+CMGF=0\r");//选择短消息信息格式:0-PDU;1-文本
                Thread.Sleep(50);
                sp.Write("AT+CNMI=2,1\r");//(新sms来时送出脉冲)
                Thread.Sleep(50);
                Log.WriteLog("设备就绪!");
                //Log.WriteLog("准备开启接收短信");
                TCheckNewSms();
                //timer_CheckNewSms.Enabled = true;
                //Log.WriteLog("接收短信成功开启");
            }
        }
        /// <summary>
        /// 开启新进程启动检查是否有新短信
        /// </summary>
        private void TCheckNewSms()
        {
            Thread t = new Thread(new ThreadStart(CheckNewSms));
            t.Start();
        }
        /// <summary>
        ///  检测 是否收到新短信(收取所有短信息)
        /// </summary>
        private void CheckNewSms()
        {
            if (sp.IsOpen)
            {
                StringBuilder sb = new StringBuilder();
                sp.RtsEnable = true;//Added By Tan In 2011-07-28
                sp.Write("AT+CMEE=1\r");
                Thread.Sleep(300);
                sp.Write("AT+CMGL=4\r");
                Log.WriteLog("执行AT指令:AT+CMGL=4!");
                //接收数据 循环读取数据 直至收到“OK”或“ERROR”
                try
                {
                    string temp = string.Empty;
                    while (temp.Trim() != "OK" && temp.Trim() != "ERROR")
                    {
                        temp = sp.ReadLine();
                        Log.WriteLog("Temp:" + temp);
                        sb.Append(temp);
                    }
                    Log.WriteLog(sb.ToString());
                }
                catch (Exception ex)
                {
                    Log.WriteLog(ex.Message);
                    //throw ex;
                }
                Thread.Sleep(300);
                if (sb.ToString() != "")
                {
                    Log.WriteLog(sb.ToString());
                }
            }
        }


结果在记录日志的txt文件里,看到如下信息:
2011-7-29 15:26:02==设备就绪!
2011-7-29 15:26:03==执行AT指令:AT+CMGL=4!

可以看到temp = sp.ReadLine();这个就没有返回值
怎么回事,有木有大侠知道?

------解决方案--------------------
你这个sp中有Write“OK”或"ERROR"吗?如果没有,你那个循环岂不是死循环。。
------解决方案--------------------
期待高手!
------解决方案--------------------
C# code

        #region 发送短息

        /// <summary>
        /// SendMessage函数用于发送短信.参数strMobileNumber设置手机号码,strMsgContent指
        /// 定要发送的内容
        /// </summary>
        /// <param name="strMobileNumber">手机号码</param>
        /// <param name="strMsgContent">要发送的内容</param>
        /// <returns> 返回指示发送是否成功</returns>
        public bool SendMessage(string strMobileNumber,string strMsgContent)
        {
            SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
            serialPort.WriteTimeout = 2000;
            try
            {
                serialPort.ReadBufferSize = 900000;
                if (serialPort.IsOpen) serialPort.Close();