我做的短信机程序,通过SerialPort类的DataReceived事件监听串口来收短信,但是只能收到70个汉字,还有下半段收不到,请大家指教!

解决方案 »

  1.   

    那就是,长短信是一类特殊短信,在发送的时候,它会拆分是多条普通短信,在每条短信里会有标志来说明这一切。
    对于你的监听程序,收到的也是一条一条的普通短信。然后自己组包成一条长短信,手机就是这么做的。
    我不知道你是基于什么协议来监听,如果是AT COMMAND的话,可能组包要麻烦一些。
      

  2.   

    我是用SerialPort的DataReceived事件来监听串口,串口的ReceivedBytesThreshold=1;有数据来,就触发接收事件,发送也是基于AT命令的!
    那么楼上你说的每条短信里的标志,要怎么加呢,是什么标志呢,发送的时候我可以根据字数来分条,然后加上标志,但是不知道要加什么标志,怎么实现?
    请指教了,谢谢!
      

  3.   

    谢谢楼上几位,我的短信猫是西门子的,TC35的,接收应该不是我程序问题,我是通过 s_port.ReadExisting();来读短信的,也没有限制什么,没道理只能收70个字的,算了,干脆把代码贴出来,请大家帮忙研究一下!
    private void s_port_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                try
                {
                    ReceiveMessageEvent = new ReceiveMessageHandle(UpdateTextBox);
                    string response = string.Empty;
                    System.Threading.Thread.Sleep(500);
                    response = s_port.ReadExisting();
                    if (response.Length > 0 && response.IndexOf("+CMT:") != -1)
                    {
                        response = response.Replace("\r\n", "|");
                        int i = response.IndexOf("|");
                        if (i == 0)
                            i = 1;
                        else
                            i = 0;
                        i = response.IndexOf("|", i);
                        response = response.Remove(0, i);
                        response = response.Replace("|", "");
                        string SendPhoneNumber = string.Empty;
                        string SendContent = string.Empty;
                        DateTime SendTime = new DateTime();
                        PDUCoding.GSMCode code = new PDUCoding.GSMCode();
                        string SCA = "";
                       //DecodingMsg方法是解码的
                        if (pduc.DecodingMsg(response, ref SendPhoneNumber, ref SendContent, ref SendTime, ref code, ref SCA))
                        {
                            if (ReceiveMessageEvent != null)
                            {
                                // 通知处理事件                            this.Invoke(ReceiveMessageEvent, new string[] { SendPhoneNumber.Trim(), SendTime.ToString().Trim(), SendContent.Trim() });
                            }
                        }
                    }
                }
                catch (Exception)
                {
                    Close();
                }
            }
      

  4.   

    不是你serialport的问题,移定规定的一条短信就是70个字
      

  5.   

    那我要怎么解决长短信分条发送,并且要加一个标志说明是一条短信,接收也要串口能够监听到短信没有结束,继续监听!
    查过相关资料,有人说用do while循环,判断有否有OK,单步调试时看到读出来的数据如下:
    "+CMGT:1,1,,121" "" "一长串的PDU"
    因为超过70个汉字,这串PDU并没有结束,下面是
    "PDU..."OK\r\n"+CMGT:1,1,,60" "" "这边是下一条短信了"
    我要如何写能够把上面这句话拆开来,到OK前面的部分,取下来跟前一条短信连接,后面的部分是另一条短信!
      

  6.   

    串口接收问题,楼上的大哥你解决了吗?我用DataReceived事件,为什么只能收到一条短信?无论别人发几条过来,是我的串口阻塞了还是sleep的时间问题,还请指教啊!