项目有一个功能要求发送短信,因为后台是ASP.NET的,所以就用C#写了一下,嘿嘿..项目要求只能发,不要收的,所以以下代码也只有发的啦,不好意思啊,用的是MSCOMM的控件,短信猫是WAVECOM的,大家参考一下:
private string ConverPDU(string str) //手机号转PDU
{
int tl,ti;
string ltem,rtem,ttem;
ttem = "";
tl = str.Length;
if ((tl != 11) & (tl != 13))
return "";
if (tl == 11)
{
tl = tl + 2;
str = "86" + str;
}
ti = 0;
while (ti < tl)
{
ltem = str.Substring(ti,1);
if ((ti+1) == tl)
rtem ="F";
else rtem = str.Substring(ti+1,1);
ttem = ttem+rtem+ltem;
ti=ti+2;
}
return ttem;
}
private string ConverUniCode(string str) //短信内容转PDU
{
Encoding encodingUTF = System.Text.Encoding.BigEndianUnicode;
string s = null;
byte [] encodedBytes = encodingUTF.GetBytes(str);
for (int i =0;i < encodedBytes.Length;i++)
{
s += BitConverter.ToString(encodedBytes,i,1);
}
return s;
}
private bool Send(int Port,string Speed,string mobile,string msg) //发送短信
{
MSComm SMSComm = new MSCommLib.MSCommClass(); //微软的MSCOMM控件声明
string prex;
string pdu,pnum,pmsg,leng;
string strIn = "";
byte[] bytin;
object objin;
string outstr;
int len;
prex = "0011000DA1";
pnum = ConverPDU(mobile);
pmsg = ConverUniCode(msg);
len = pmsg.Length;
len = len/2;
leng = len.ToString("X");
if (len < 16)
{
leng = "0"+ leng;
}
pdu = prex +pnum+"0008A7"+leng + pmsg;
len = (pdu.Length/2)-1;
try
{
SMSComm.CommPort = Convert.ToInt16(Port);
if (SMSComm.PortOpen == true)
SMSComm.PortOpen = false;
SMSComm.Settings = Speed;
SMSComm.Handshaking = MSCommLib.HandshakeConstants.comNone;
SMSComm.InputLen = 0;
SMSComm.InputMode = MSCommLib.InputModeConstants.comInputModeBinary;
SMSComm.PortOpen = true;
SMSComm.Output = "AT"+"/r/n";
System.Threading.Thread.Sleep(1000);
objin = SMSComm.Input;
bytin = (byte[])objin;
strIn= Encoding.ASCII.GetString(bytin);
SMSComm.Output = "AT"+"/r/n";
System.Threading.Thread.Sleep(1000);
objin = SMSComm.Input;
bytin = (byte[])objin;
strIn= Encoding.ASCII.GetString(bytin);
SMSComm.Output = "AT+CMGF=0"+"/r/n";
System.Threading.Thread.Sleep(1000);
objin = SMSComm.Input;
bytin = (byte[])objin;
strIn= Encoding.ASCII.GetString(bytin);
SMSComm.Output = "AT+CNMI=2,1,0,1"+"/r/n";
System.Threading.Thread.Sleep(1000);
objin = SMSComm.Input;
bytin = (byte[])objin;
strIn= Encoding.ASCII.GetString(bytin);
outstr = string.Format("AT+CMGS={0}/r",len);
SMSComm.Output = outstr;
System.Threading.Thread.Sleep(1000);
objin = SMSComm.Input;
bytin = (byte[])objin;
strIn= Encoding.ASCII.GetString(bytin);
SMSComm.InBufferCount = 0;
SMSComm.OutBufferCount= 0;
if(( strIn.Length > 0) && strIn.EndsWith("> "))
{
outstr = pdu.Trim()+"/x01a";
SMSComm.Output = outstr.Trim();
System.Threading.Thread.Sleep(5000);
objin = SMSComm.Input;
bytin = (byte[])objin;
strIn= Encoding.ASCII.GetString(bytin);
SMSComm.PortOpen = false;
return true;
}
SMSComm.PortOpen = false;
return false;
}
catch
{
SMSComm.PortOpen = false;
return false;
}
}