c#电话号码接收器

本文关键字:接收器 电话号码 | 更新日期: 2023-09-27 18:03:57

我正在尝试构建一个简单的应用程序,通过调制解调器返回呼叫号码,但我似乎只获得从调制解调器接收的数据的第一行。

当我运行超级终端并通过AT#CID=1命令,ring该号码时,我得到一个完整的输出:

好吧

日期= 0314

= 1111

NMBR = 4936

斯图尔特NAME = E

在我的应用程序中,我似乎只收到包含"OK"部分的第一部分。任何帮助我做错了什么或失踪?

代码:

 public partial class Form1 : Form
 {
    public SerialPort port = new SerialPort("COM3", 115200,Parity.None,8,StopBits.One);
    public String sReadData = "";
    public String sNumberRead = "";
    public String sData = "AT#CID=1";
    public Form1()
    {
        InitializeComponent();
    }
    private void btnRun_Click(object sender, EventArgs e)
    {
        SetModem();
        ReadModem();
        MessageBox.Show(sReadData);
    }
 public void SetModem()
    {
        if (port.IsOpen == false)
        {
            port.Open();
        }
        port.WriteLine(sData + System.Environment.NewLine);
        port.BaudRate = iBaudRate;
        port.DtrEnable = true;
        port.RtsEnable = true;
    }
    public string ReadModem()
    {
        try
        {
            sReadData = port.ReadExisting().ToString();
            return (sReadData);
        }
        catch (Exception ex)
        {
            String errorMessage;
            errorMessage = "Error in Reading: ";
            errorMessage = String.Concat(errorMessage, ex.Message);
            errorMessage = String.Concat(errorMessage, " Line: ");
            errorMessage = String.Concat(errorMessage, ex.Source);
            MessageBox.Show(errorMessage, "Error");
            return "";
        }
    }
    private void btnExit_Click(object sender, EventArgs e)
    {
        port.Close();
        Close();
    }
}
}

c#电话号码接收器

ReadModem()中尝试在循环中使用port.ReadLine()并循环直到您得到一行表示RING(如果这是您期望的最后一行)。

设置后读取一次调制解调器。您需要在serialPort上订阅DataReceivedEvent以连续地从该端口获取数据。

public void SetModem()
    {
        if (port.IsOpen == false)
        {
            port.Open();
        }
        port.WriteLine(sData + System.Environment.NewLine);
        port.BaudRate = iBaudRate;
        port.DtrEnable = true;
        port.RtsEnable = true;
        port.DataReceived += port_DataReceived;
    }
    void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
            //For e.g. display your incoming data in RichTextBox
            richTextBox1.Text += this.serialPort1.ReadLine();           
           //OR
           ReadModem();
    }