smsPort.PortName = "COM6";
            smsPort.BaudRate = 9600;
            smsPort.DataBits = 8;
            smsPort.StopBits = System.IO.Ports.StopBits.One;
            smsPort.ReadTimeout = 1000;
            smsPort.DtrEnable = true;
            smsPort.RtsEnable = true;
            //smsPort.NewLine = "\x01a";
            try
            {
                if (smsPort.IsOpen)
                {
                    smsPort.Close();
                }
                smsPort.Open();
                smsPort.WriteLine("at");
                smsPort.WriteLine("at+cmgf=0");
                string decodedSMS = sms.smsDecodedsms("8613800100500", "15831634547", "hello");
                smsPort.WriteLine(String.Format("AT+CMGS={0}\r", sms.nLength));
                smsPort.Write(String.Format("{0}\x01a", decodedSMS));
                MessageBox.Show("OK");
            }
            catch (Exception e)
            {
                MessageBox.Show("错误:" + e.Message);
            }
这是我写的代码sms是PDUdecoding类的实例
smsPort是vs自带的seriialPort类

解决方案 »

  1.   

    smsPort.BaudRate = 115200;  试试
      

  2.   

    8613800100500
    这个就是短信中心号。。
    用vs自带的serialPOrt 怎么检查返回值?
      

  3.   

    结束符 是 0x1a 不是 x01a
      

  4.   

    smsPort.Write(String.Format("{0}\x01a", decodedSMS)); 
      

  5.   

    光写不读,你往串口写一个AT命令,然后读取,等串口返回正确的结果,再接着写啊.
    并且,串口通讯是异步的. 不是你写了命令然后马上可以返回结果的.正确的做法: 向串口写入命令,然后循环从串口读取结果,等有了正确的结果,再写入下一个命令.或者你直接用硬件提供的API,很多硬件都提供了API,你直接调用就可以了.
      

  6.   

     smsPort.WriteLine(String.Format("AT+CMGS={0}\r", sms.nLength)); 
     Thread.Sleep(30000);
     smsPort.Write(String.Format("{0}\x01a", decodedSMS)); 
    猫的数据还没接受完 你就 重写数据了 当然会出错的