SerialPort sp = new SerialPort("COM1", 9600);
            sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
            sp.Open();
            string strCmd = "AT+CSMP=21,167,0,8\r";
            sp.Write(strCmd);
            Thread.Sleep(100);
            strCmd = "AT+CMMS=3\r";
            sp.Write(strCmd);
            Thread.Sleep(100);
            strCmd = "AT+CMGF=1\r";
            sp.Write(strCmd);
            Thread.Sleep(100);
            strCmd = "AT+CMGS=13426023512\r";
            sp.Write(strCmd);
            Thread.Sleep(100);
            strCmd = EncodingUCS2("随便") + "\x1A";
            sp.Write(strCmd);
            Thread.Sleep(10000);            string result = String.Empty;
            int size = sp.BytesToRead;
            byte[] buffer = new byte[size];
            int count = sp.Read(buffer, 0, buffer.Length);
            result = Encoding.UTF8.GetString(buffer, 0, count).Replace("\0", "");            sp.Close();int size = sp.BytesToRead;一直是0!

解决方案 »

  1.   

    1.在sp_DataReceived设断点监听
    2.串口是否有发送数据出来?
    3.检查所接的串口是否是COM1?
      

  2.   

    strCmd = EncodingUCS2("随便") + "\x1A";
    sp.Write(strCmd);
    1A是什么
    试试这下面再加一句
    sp.Write("\r\n");
      

  3.   

            private static void sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                lock (_lock)
                {
                    Thread.Sleep(1000);
                    SerialPort sp = (SerialPort)sender;
                    if (sp.IsOpen)
                    {
                        string result = String.Empty;
                        byte[] buffer = new byte[128];
                        int count = sp.Read(buffer, 0, buffer.Length);
                        result = Encoding.UTF8.GetString(buffer, 0, count);
                        if (result.ToUpper().IndexOf("+CMTI") != -1)//这是收到短信
                        {
                            result = result.Replace("\r", "").Replace("\n", "");
                            string index = result.Substring(result.IndexOf(",") + 1);
                            sp.Write("at+cmgr=" + index + "\r");
                            Thread.Sleep(1000);
                            int size = sp.BytesToRead;
                            byte[] b2 = new byte[size];
                            count = sp.Read(b2, 0, b2.Length);
                            result = Encoding.UTF8.GetString(b2, 0, count);
                            string ucs2Text = result.Substring(result.LastIndexOf("\"") + 1);
                            if ((ucs2Text.IndexOf("ERROR") == -1 && ucs2Text.IndexOf("OK") != -1))
                            {
                                string text = ucs2Text.Replace("OK\r\n", "").Replace("\r", "").Replace("\n", "");
                                Console.Write("收到短信:" + DecodingUCS2(text) + Environment.NewLine);
                                sp.Write("at+cmgd=" + index + "\r");
                                Thread.Sleep(100);
                            }
                        }
                    }
                }
            }接收短信的能收到
      

  4.   

    发送短信是用ctrl+z,不是回车
      

  5.   

    我被这问题搞死了,read试过了,readexisting试过了,就是收不到返回值!但是接收短信是可以的
      

  6.   

    你注册了DataReceived事件?那你这等的时候有没有先注销DataReceived?不注销的话,你等的这10秒时间,DataReceived事件中就先吧数据读走了。你当然没数据?
      

  7.   

    try
    {
        注销事件
        你顶上那一段代码,
    }
    finally
    {
        重新注册事件
    }
      

  8.   

    果然是因为注册了DataReceived事件。