2014-10-11 13 views
0

我希望從控制檯接收從GSM調制解調器發送的每條消息,以便使用DataReceivedHandler。我的問題是消息總是會在控制檯上接收到另一條消息以接收我必須調試我的控制檯應用程序,這意味着我的處理程序無法正常工作。 另外一個問題是我已經使用pduconverter.dll將pdu格式的消息轉換爲文本格式,從pduconverter.dll的例程中獲取時間戳,消息文本但無法獲取發件人號碼。這裏是我的代碼如何使用接收到的數據從GSM調制解調器接收控制檯應用程序中的消息

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO.Ports; 
using System.Data.Sql; 
using System.Data.SqlClient; 
using GsmComm.PduConverter; 


namespace readSerialData 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     SerialPort serialport = new SerialPort(); 
     int mSpeed = 1; 
     serialport.PortName = "COM16"; 
     serialport.BaudRate = 9600; 
     serialport.Parity = Parity.None; 
     serialport.DataBits = 8; 
     serialport.StopBits = StopBits.One; 
     serialport.Handshake = Handshake.XOnXOff; 
     serialport.DtrEnable = true; 
     serialport.RtsEnable = true; 
     serialport.NewLine = Environment.NewLine; 
     serialport.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); 
     serialport.Open(); 
     Console.ReadKey(); 
     serialport.Close(); 

    } 

    private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) 
    {   

      SerialPort sp = (SerialPort)sender;    
      sp.WriteLine("AT+CNMI=1,2,0,0\r"); 
      sp.WriteLine("AT+CMGL=4\r"); 
      string indata = sp.ReadExisting(); 
      Console.WriteLine("Data Received:"); 
      string sub = indata.Substring(indata.IndexOf('0'), indata.Length -  indata.IndexOf('0')); 

      IncomingSmsPdu sms = GsmComm.PduConverter.IncomingSmsPdu.Decode(sub, true); 
      Console.WriteLine(sms.SmscAddress); 
     Console.WriteLine(sms.UserDataText); 
      Console.WriteLine(sms.GetTimestamp()); 
      Console.ReadKey(); 

      Console.ReadKey(); 
     } 
    } 
} 

請幫忙,我一直堅持這個從很多天。

回答

0

Main方法中Console.ReadKey()用於接受按鍵退出程序,但爲什麼它在DataReceivedHandler中使用?

沒有按鍵,DataReceivedHandler將永遠不會返回。我想這是你的問題的原因。從DataReceivedHandler中刪除它們以查看是否解決了您的問題。

private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) 
{ 
    ... 
    Console.WriteLine(sms.GetTimestamp()); 
    //Console.ReadKey(); 

    //Console.ReadKey(); 
} 
+0

Thanks.It現在正在接收控制檯上的每條消息。但是爲什麼在接收消息時確定連續流? – user3433943 2014-10-12 06:53:05

+0

這是一個需要更多背景的問題。我建議你問一個新問題,發佈你的代碼,並提供一些調試信息,比如你從SerialPort收到什麼(indata的值是什麼),並提供一個鏈接到GSMComm庫(它是[一個來自Github](https://github.com/welly87/GSMComm)?) – kennyzx 2014-10-12 07:02:33

+0

是的,它來自Github – user3433943 2014-10-12 10:57:54

相關問題