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