C#电话号码接收器

时间:2013-03-14 11:26:18

标签: c# modem

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

当我运行HyperTerminal并通过AT#CID = 1命令时,拨打该号码,我得到一个完整输出:

DATE = 0314

TIME = 1111

NMBR = 4936

NAME = Stuart E

RING

在我的应用程序中,我似乎只收到包含“确定”部分的第一部分。对我的错误或遗失的任何帮助?

代码:

 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();
    }
}
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您只是在设置后读取调制解调器一次。您需要在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();
    }