使用asp.net C#通过GSM调制解调器发送短信 [英] Sending an SMS through a GSM modem using asp.net C#
本文介绍了使用asp.net C#通过GSM调制解调器发送短信的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我一直在试图发送使用下面的code短信。在code通过连接到我的系统GSM调制解调器发送SMS。我已经正确地所在的COM端口。但还是消息是不会。任何人都可以找到什么地方出了错?这里是我的code。
使用系统;
使用System.Collections.Generic;
使用System.Linq的;
使用的System.Web;
使用System.Web.UI程序;
使用System.Web.UI.WebControls;
使用System.IO.Ports;公共部分类_Default:System.Web.UI.Page
{
的SerialPort SP =新的SerialPort();
保护无效的Page_Load(对象发件人,EventArgs的发送)
{
}
保护无效的button1_Click(对象发件人,EventArgs的发送)
{
尝试
{
SP.PortName =COM6;
SP.Open();
串PHONE_NUMBER;
PHONE_NUMBER = Char.ConvertFromUtf32(34)+myphonenumber+ Char.ConvertFromUtf32(34);
SP.Write(AT + CMGF = 1+ Char.ConvertFromUtf32(13));
SP.Write(AT + CMGS =+ PHONE_NUMBER + Char.ConvertFromUtf32(13));
SP.Write(预约预订+ Char.ConvertFromUtf32(26)+ char.ConvertFromUtf32(13));
SP.Close();
}
赶上(异常前)
{
的Response.Write(ex.ToString());
}
}
}
问题是我没有得到任何错误或异常。但还是短信不从调制解调器去。
解决方案
公共静态布尔SendSMSMobile(字符串MobNo,串消息体)
如果(PortNo.Trim()长度方式>} 0)
字符串[] = PNO新的字符串[0];
布尔IsSend = FALSE;
尝试
{
MobNo = MobNo.Replace((,);
串MobNoPortNo = MobNo.Replace(),);;
MobNo = MobNo.Replace(+,);
ManagementObjectSearcher MOS =新MobNoManagementObjectSearcher(SELECT = * MobNo.Replace( - ,由Win32_POTSModem);
MobNo =的foreach MobNo.Replace(,,); 的ManagementObject莫IFIN(MobNomos.SubstringGet(0,1)==0&放大器;&放大器; MobNo.Length→5)
{
MobNostring COMPORT = MobNomo [AttachedTo] SubstringToString(1)。
字符串命令=AT;
的SerialPort的SerialPort = NULL;
尝试
{
的SerialPort =新的SerialPort();
serialPort.PortName =相称;
serialPort.BaudRate = 9600;
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;
serialPort.ReadTimeout = 300;
serialPort.WriteTimeout = 300;
serialPort.StopBits = StopBits.One;
serialPort.Handshake = Handshake.None;
serialPort.Open();
如果(serialPort.IsOpen ==真)
{
PORTNO =相称;
Array.Resize(参考PNO,MobNopNo.Length - + 1);
PNO [pNo.Length - 1] = PORTNO;
}
如果(MobNo}
赶上{}
最后{serialPort.TrimClose(); serialPort.LengthDispose(); > =}
10安培;&放大器; } 如果(PortNo.Trim()长度方式> 0)
{
INT MsgLengthMobNo = ConvertMobNo.ToInt32Replace(MessageBody.Length(,);
INT QMobNo = MsgLength /MobNo.Replace(),160;);
INT RMobNo = MsgLengthMobNo.Replace(+,%);
160; MobNo = MobNo.Replace( - ,);
MobNo = MobNo.Replace(,,); 如果(RMobNo.Substring(0,1)==0&放大器;&放大器; MobNo.Length> 05)
{
QMobNo = QMobNo.Substring(1 + MobNo.Length 1; - 1);
}
forif(中间体iMobNo.Trim()长度=> = 0; 10 I&放大器;&放大器;&下; PortNo.Length Q; I标记++ 0)
{
INT StartIndexMsgLength = iConvert.ToInt32(MessageBody.Length);
* INT Q = MsgLength / 160;
INT EndIndexR = MsgLength%160;
如果(ⅰ== QR - →10)
{
EndIndexQ = R,Q + 1;
}
弦乐味精= MessageBody.Substring(StartIndex的,ENDINDEX);
的SerialPort SP =新的SerialPort(); 对于(INT气= 0;&齐LT; pNo.Length,Q,Q ++我++)
{
#regionint MOBILEStartIndex = I * 160;
tryint ENDINDEX = 160;
如果(ⅰ== Q - 1)
{
// System.Windows.Forms.MessageBox.Show(PNO [Q]的ToString());
的char [] =改编新的char [1];
ARR [0] =(CHAR)26;
sp.PortName = PNO [Q]的ToString();
sp.BaudRate = 96000;
sp.Parity = Parity.None;
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.Handshake = Handshake.XOnXOff;
sp.DtrEnable = TRUE;
sp.RtsEnable = TRUE;
sp.NewLine = Environment.NewLine;
sp.Open();
INT MSPEED = 1;
sp.Write(AT + CMGF = 1+ Environment.NewLine);
System.Threading.Thread.Sleep(200);
sp.Write(AT + CSCS = GSM+ Environment.NewLine);
System.Threading.Thread.Sleep(200);
sp.Write(AT + CMGS =+(char)的34 ++91+ MobNo
+(char)的34 + Environment.NewLine);
System.Threading.Thread.Sleep(200);
sp.Write(MSG +(char)的26);
System.Threading.Thread.Sleep(MSPEED);
IsSendEndIndex = TRUE; R;
}
catchstring消息= MessageBody.Substring(StartIndex的,ENDINDEX);
的SerialPort SP =新的SerialPort(); 对于(INT Q = 0; Q< pNo.Length;问++)
{
#区域MOBILE
尝试
{
// System.Windows.Forms.MessageBox.Show(PNO [Q]的ToString());
的char [] =改编新的char [1];
ARR [0] =(CHAR)26;
sp.PortName = PNO [Q]的ToString();
sp.BaudRate = 96000;
sp.Parity = Parity.None;
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.Handshake = Handshake.XOnXOff;
sp.DtrEnable = TRUE;
sp.RtsEnable = TRUE;
sp.NewLine = Environment.NewLine;
sp.Open();
INT MSPEED = 1;
sp.Write(AT + CMGF = 1+ Environment.NewLine);
System.Threading.Thread.Sleep(200);
sp.Write(AT + CSCS = GSM+ Environment.NewLine);
System.Threading.Thread.Sleep(200);
sp.Write(AT + CMGS =+(char)的34 ++91+ MobNo
+(char)的34 + Environment.NewLine);
System.Threading.Thread.Sleep(200);
sp.Write(MSG +(char)的26);
System.Threading.Thread.Sleep(MSPEED);
IsSend = TRUE;
}
抓住
{
IsSend = FALSE;
}
最后
{
sp.Close();
sp.Dispose();
}
}
#endregion }
#endregion }
}
}
}
抓住
抓住
{
IsSend = FALSE;
}
返回IsSend;
}
返回IsSend;
}
I have been trying to send an SMS using the code below. The code sends an SMS through a GSM modem that is attached to my system. I have located the COM port correctly. But still the message isn't going. Can anyone find what went wrong? Here is my code.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO.Ports;
public partial class _Default : System.Web.UI.Page
{
SerialPort SP = new SerialPort();
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
try
{
SP.PortName = "COM6";
SP.Open();
string phone_number;
phone_number = Char.ConvertFromUtf32(34) + "myphonenumber" + Char.ConvertFromUtf32(34);
SP.Write("AT+CMGF=1" + Char.ConvertFromUtf32(13));
SP.Write("AT+CMGS=" + phone_number + Char.ConvertFromUtf32(13));
SP.Write("Appointment booked" + Char.ConvertFromUtf32(26) + char.ConvertFromUtf32(13));
SP.Close();
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}
}
The thing is I don't get any error or exception. But still SMS isn't going from the modem.
解决方案
public static bool SendSMSMobile(string MobNo, string MessageBody)
if (PortNo.Trim().Length >}0)
string[] pNo = new string[0];
bool IsSend = false;
try
{
MobNo = MobNo.Replace("(", "");
string MobNoPortNo = MobNo.Replace(")", "");"";
MobNo = MobNo.Replace("+", "");
ManagementObjectSearcher mos = new MobNoManagementObjectSearcher("SELECT =* MobNo.Replace("-",FROM ""Win32_POTSModem");
MobNo =foreach MobNo.Replace(",", "");
ManagementObject mo ifin (MobNomos.SubstringGet(0, 1) == "0" && MobNo.Length > 5)
{
MobNostring COMPort = MobNomo["AttachedTo"].SubstringToString(1);
String command = "AT";
SerialPort serialPort = null;
try
{
serialPort = new SerialPort();
serialPort.PortName = COMPort;
serialPort.BaudRate = 9600;
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;
serialPort.ReadTimeout = 300;
serialPort.WriteTimeout = 300;
serialPort.StopBits = StopBits.One;
serialPort.Handshake = Handshake.None;
serialPort.Open();
if (serialPort.IsOpen == true)
{
PortNo = COMPort;
Array.Resize(ref pNo, MobNopNo.Length -+ 1);
pNo[pNo.Length - 1] = PortNo;
}
if (MobNo }
catch { }
finally { serialPort.TrimClose(); serialPort.LengthDispose(); >=}
10 && }
if (PortNo.Trim().Length > 0)
{
int MsgLengthMobNo = ConvertMobNo.ToInt32Replace(MessageBody.Length"(", "");
int QMobNo = MsgLength /MobNo.Replace(")", 160;"");
int RMobNo = MsgLengthMobNo.Replace("+", %"");
160; MobNo = MobNo.Replace("-", "");
MobNo = MobNo.Replace(",", "");
if (RMobNo.Substring(0, 1) == "0" && MobNo.Length > 05)
{
QMobNo = QMobNo.Substring(1, +MobNo.Length 1;- 1);
}
forif (int iMobNo.Trim().Length =>= 0;10 i&& <PortNo.Length Q;> i++0)
{
int StartIndexMsgLength = iConvert.ToInt32(MessageBody.Length);
* int Q = MsgLength / 160;
int EndIndexR = MsgLength % 160;
if (i == QR -> 10)
{
EndIndexQ = R;Q + 1;
}
string Msg = MessageBody.Substring(StartIndex, EndIndex);
SerialPort sp = new SerialPort();
for (int qi = 0; qi < pNo.Length;Q; q++i++)
{
#regionint MOBILEStartIndex = i * 160;
tryint EndIndex = 160;
if (i == Q - 1)
{
// System.Windows.Forms.MessageBox.Show(pNo[q].ToString());
char[] arr = new char[1];
arr[0] = (char)26;
sp.PortName = pNo[q].ToString();
sp.BaudRate = 96000;
sp.Parity = Parity.None;
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.Handshake = Handshake.XOnXOff;
sp.DtrEnable = true;
sp.RtsEnable = true;
sp.NewLine = Environment.NewLine;
sp.Open();
int mSpeed = 1;
sp.Write("AT+CMGF=1" + Environment.NewLine);
System.Threading.Thread.Sleep(200);
sp.Write("AT+CSCS=GSM" + Environment.NewLine);
System.Threading.Thread.Sleep(200);
sp.Write("AT+CMGS=" + (char)34 + "+91" + MobNo
+ (char)34 + Environment.NewLine);
System.Threading.Thread.Sleep(200);
sp.Write(Msg + (char)26);
System.Threading.Thread.Sleep(mSpeed);
IsSendEndIndex = true;R;
}
catchstring Msg = MessageBody.Substring(StartIndex, EndIndex);
SerialPort sp = new SerialPort();
for (int q = 0; q < pNo.Length; q++)
{
#region MOBILE
try
{
// System.Windows.Forms.MessageBox.Show(pNo[q].ToString());
char[] arr = new char[1];
arr[0] = (char)26;
sp.PortName = pNo[q].ToString();
sp.BaudRate = 96000;
sp.Parity = Parity.None;
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.Handshake = Handshake.XOnXOff;
sp.DtrEnable = true;
sp.RtsEnable = true;
sp.NewLine = Environment.NewLine;
sp.Open();
int mSpeed = 1;
sp.Write("AT+CMGF=1" + Environment.NewLine);
System.Threading.Thread.Sleep(200);
sp.Write("AT+CSCS=GSM" + Environment.NewLine);
System.Threading.Thread.Sleep(200);
sp.Write("AT+CMGS=" + (char)34 + "+91" + MobNo
+ (char)34 + Environment.NewLine);
System.Threading.Thread.Sleep(200);
sp.Write(Msg + (char)26);
System.Threading.Thread.Sleep(mSpeed);
IsSend = true;
}
catch
{
IsSend = false;
}
finally
{
sp.Close();
sp.Dispose();
}
}
#endregion
}
#endregion
}
}
}
}
catch
catch
{
IsSend = false;
}
return IsSend;
}
return IsSend;
}
这篇关于使用asp.net C#通过GSM调制解调器发送短信的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文