在 C# 中通过串行端口发送 SMS 但收到垃圾
Sending SMS via Serial Port in C# but getting garbage
我正在通过串行端口发送短信,但收到的是????。请帮助我正确地批量接收短信。下面是我的代码:
SmsHandler.SendSMS("hello world",phonenumber,"USB Modem");
public static void SendSMS(String smstxt, String PhoneNumber, String DeviceName)
{
_serialPort = new SerialPort(Port.getPort(DeviceName), 19200, Parity.None, 8, StopBits.One);
_serialPort.Handshake = Handshake.None;
_serialPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
_serialPort.ReadTimeout = 2000;
_serialPort.WriteTimeout = 2000;
_serialPort.Open();
try
{
if (!_serialPort.IsOpen)
_serialPort.Open();
_serialPort.Write("AT+CMGF=1\r\n");
Thread.Sleep(1000);
_serialPort.Write("AT+CSCA=SERVICE\r\n");// Service Center
Thread.Sleep(1000);
_serialPort.Write("AT+CMGS=\"" + PhoneNumber + "\"" + Environment.NewLine);
_serialPort.Write(smstxt + char.ConvertFromUtf32(26) + Environment.NewLine);
MessageBox.Show("Message Sent");
}
catch (Exception ex)
{
MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
}
}
static void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(500);
string data = _serialPort.ReadLine();
Console.Write(data);
}
我在接收手机上收到垃圾。请帮助解决问题。谢谢
可能与串口编码有关?
也许尝试不同的编码:
_serialPort.Encoding = Encoding.GetEncoding("iso-8859-1");
另外,我可以建议您查看:http://www.scampers.org/steve/sms/libraries.htm
- 它有一个简单的 API 用于执行 AT 命令。
尝试更改控制台字体,使用像 Lucida Console 这样的 TrueType 字体而不是默认的 Raster 字体,因为第一个不支持 Uni 字符。
这篇文章晚了三个月,但它可能会对以后阅读这篇文章的人有所帮助。
要通过串行端口发送短信,您需要将文本转换为消息的十六进制表示,然后发送结果。
例如:
_serialPort.Write(StrToHex(smstxt) + char.ConvertFromUtf32(26) + Environment.NewLine);
而 StrToHex 方法可以是这样的:
public static string StrToHex(string strMessage)
{
byte[] byteArray = Encoding.UTF8.GetBytes(strMessage);
string strHex = BitConverter.ToString(byteArray);
strHex = strHex.Replace("-", "");
return strHex;
}
我正在通过串行端口发送短信,但收到的是????。请帮助我正确地批量接收短信。下面是我的代码:
SmsHandler.SendSMS("hello world",phonenumber,"USB Modem");
public static void SendSMS(String smstxt, String PhoneNumber, String DeviceName)
{
_serialPort = new SerialPort(Port.getPort(DeviceName), 19200, Parity.None, 8, StopBits.One);
_serialPort.Handshake = Handshake.None;
_serialPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
_serialPort.ReadTimeout = 2000;
_serialPort.WriteTimeout = 2000;
_serialPort.Open();
try
{
if (!_serialPort.IsOpen)
_serialPort.Open();
_serialPort.Write("AT+CMGF=1\r\n");
Thread.Sleep(1000);
_serialPort.Write("AT+CSCA=SERVICE\r\n");// Service Center
Thread.Sleep(1000);
_serialPort.Write("AT+CMGS=\"" + PhoneNumber + "\"" + Environment.NewLine);
_serialPort.Write(smstxt + char.ConvertFromUtf32(26) + Environment.NewLine);
MessageBox.Show("Message Sent");
}
catch (Exception ex)
{
MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
}
}
static void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(500);
string data = _serialPort.ReadLine();
Console.Write(data);
}
我在接收手机上收到垃圾。请帮助解决问题。谢谢
可能与串口编码有关?
也许尝试不同的编码:
_serialPort.Encoding = Encoding.GetEncoding("iso-8859-1");
另外,我可以建议您查看:http://www.scampers.org/steve/sms/libraries.htm - 它有一个简单的 API 用于执行 AT 命令。
尝试更改控制台字体,使用像 Lucida Console 这样的 TrueType 字体而不是默认的 Raster 字体,因为第一个不支持 Uni 字符。
这篇文章晚了三个月,但它可能会对以后阅读这篇文章的人有所帮助。
要通过串行端口发送短信,您需要将文本转换为消息的十六进制表示,然后发送结果。 例如:
_serialPort.Write(StrToHex(smstxt) + char.ConvertFromUtf32(26) + Environment.NewLine);
而 StrToHex 方法可以是这样的:
public static string StrToHex(string strMessage)
{
byte[] byteArray = Encoding.UTF8.GetBytes(strMessage);
string strHex = BitConverter.ToString(byteArray);
strHex = strHex.Replace("-", "");
return strHex;
}