如题//开始
protected override void OnStart(string[] args)
{
uint MobPort = uint.Parse(XmlHelper.GetValue("Config.xml", "port"));
sp.BaudRate = 9600;
sp.PortName = "COM" + MobPort.ToString();
//如果串口已经打开 则先关闭
if (sp.IsOpen)
sp.Close();
sp.Open();
//初始化设备
if (sp.IsOpen)
{ sp.Write("ATE0\r");
Thread.Sleep(50);
sp.Write("AT+CMGF=0\r");//选择短消息信息格式:0-PDU;1-文本
Thread.Sleep(50);
sp.Write("AT+CNMI=2,1\r");//(新sms来时送出脉冲)
Thread.Sleep(50);
Log.WriteLog("设备就绪!");
//Log.WriteLog("准备开启接收短信");
TCheckNewSms();
//timer_CheckNewSms.Enabled = true;
//Log.WriteLog("接收短信成功开启");
}
}
/// <summary>
/// 开启新进程启动检查是否有新短信
/// </summary>
private void TCheckNewSms()
{
Thread t = new Thread(new ThreadStart(CheckNewSms));
t.Start();
}
/// <summary>
/// 检测 是否收到新短信(收取所有短信息)
/// </summary>
private void CheckNewSms()
{
if (sp.IsOpen)
{
StringBuilder sb = new StringBuilder();
sp.RtsEnable = true;//Added By Tan In 2011-07-28
sp.Write("AT+CMEE=1\r");
Thread.Sleep(300);
sp.Write("AT+CMGL=4\r");
Log.WriteLog("执行AT指令:AT+CMGL=4!");
//接收数据 循环读取数据 直至收到“OK”或“ERROR”
try
{
string temp = string.Empty;
while (temp.Trim() != "OK" && temp.Trim() != "ERROR")
{
temp = sp.ReadLine();
Log.WriteLog("Temp:" + temp);
sb.Append(temp);
}
Log.WriteLog(sb.ToString());
}
catch (Exception ex)
{
Log.WriteLog(ex.Message);
//throw ex;
}
Thread.Sleep(300);
if (sb.ToString() != "")
{
Log.WriteLog(sb.ToString());
}
}
}结果在记录日志的txt文件里,看到如下信息:
2011-7-29 15:26:02==设备就绪!
2011-7-29 15:26:03==执行AT指令:AT+CMGL=4!可以看到temp = sp.ReadLine();这个就没有返回值
怎么回事,有木有大侠知道?
protected override void OnStart(string[] args)
{
uint MobPort = uint.Parse(XmlHelper.GetValue("Config.xml", "port"));
sp.BaudRate = 9600;
sp.PortName = "COM" + MobPort.ToString();
//如果串口已经打开 则先关闭
if (sp.IsOpen)
sp.Close();
sp.Open();
//初始化设备
if (sp.IsOpen)
{ sp.Write("ATE0\r");
Thread.Sleep(50);
sp.Write("AT+CMGF=0\r");//选择短消息信息格式:0-PDU;1-文本
Thread.Sleep(50);
sp.Write("AT+CNMI=2,1\r");//(新sms来时送出脉冲)
Thread.Sleep(50);
Log.WriteLog("设备就绪!");
//Log.WriteLog("准备开启接收短信");
TCheckNewSms();
//timer_CheckNewSms.Enabled = true;
//Log.WriteLog("接收短信成功开启");
}
}
/// <summary>
/// 开启新进程启动检查是否有新短信
/// </summary>
private void TCheckNewSms()
{
Thread t = new Thread(new ThreadStart(CheckNewSms));
t.Start();
}
/// <summary>
/// 检测 是否收到新短信(收取所有短信息)
/// </summary>
private void CheckNewSms()
{
if (sp.IsOpen)
{
StringBuilder sb = new StringBuilder();
sp.RtsEnable = true;//Added By Tan In 2011-07-28
sp.Write("AT+CMEE=1\r");
Thread.Sleep(300);
sp.Write("AT+CMGL=4\r");
Log.WriteLog("执行AT指令:AT+CMGL=4!");
//接收数据 循环读取数据 直至收到“OK”或“ERROR”
try
{
string temp = string.Empty;
while (temp.Trim() != "OK" && temp.Trim() != "ERROR")
{
temp = sp.ReadLine();
Log.WriteLog("Temp:" + temp);
sb.Append(temp);
}
Log.WriteLog(sb.ToString());
}
catch (Exception ex)
{
Log.WriteLog(ex.Message);
//throw ex;
}
Thread.Sleep(300);
if (sb.ToString() != "")
{
Log.WriteLog(sb.ToString());
}
}
}结果在记录日志的txt文件里,看到如下信息:
2011-7-29 15:26:02==设备就绪!
2011-7-29 15:26:03==执行AT指令:AT+CMGL=4!可以看到temp = sp.ReadLine();这个就没有返回值
怎么回事,有木有大侠知道?
解决方案 »
- 谁知道如何用.Net和smtpClient发送base64编码的邮件?
- winform 多线程
- VC#2005中用serialport控件,DataReceived的事件响应怎么不起作用?请各位前辈指教!
- c#调用com的问题,请教
- 高分请人帮忙优化下代码的。。。。[在线等======]
- 谁知道这是怎么回事
- 代码头部有using tw.xx.xxx.xxxx。我怎么才能查找此命名空间?
- 请教一个SqlParameter.Direction的问题
- 芝麻开门,还有微软专家,来帮我解决这个问题啊!!
- c#中编码 usc2转ansi
- C# WinForm listview 如何将相同的行合并
- winForm开发中,怎样能给出数量的“下限提示”?谢大侠,盼回复~~!
Log.WriteLog("Temp:" + temp);
这个总得执行吧
执行了,那日志文件中就得有 Temp: 吧
可是现在没有
#region 发送短息 /// <summary>
/// SendMessage函数用于发送短信.参数strMobileNumber设置手机号码,strMsgContent指
/// 定要发送的内容
/// </summary>
/// <param name="strMobileNumber">手机号码</param>
/// <param name="strMsgContent">要发送的内容</param>
/// <returns> 返回指示发送是否成功</returns>
public bool SendMessage(string strMobileNumber,string strMsgContent)
{
SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
serialPort.WriteTimeout = 2000;
try
{
serialPort.ReadBufferSize = 900000;
if (serialPort.IsOpen) serialPort.Close();
serialPort.Open();
serialPort.WriteLine("ATZ\r");
Thread.Sleep(500);
serialPort.ReadExisting();
serialPort.WriteLine("AT+CSMP=1,167,0,8" + "\r");
serialPort.Write("AT+CMGS=" + strMobileNumber + "\r");
Thread.Sleep(1000);
string content = GBToUnicode(strMsgContent);
serialPort.Write(content + Convert.ToChar(26).ToString());
Thread.Sleep(2000);
string msg = serialPort.ReadExisting();
serialPort.Close();
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
finally
{
//保证操作完成以后关闭端口,避免占用
if (serialPort.IsOpen)
serialPort.Close();
}
}
#endregion
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.IO.Ports;
using System.Threading;
using System.Text.RegularExpressions;/// <summary>
///SMS 的摘要说明
/// </summary>
public class SMS
{
public SMS()
{
} public static char HexToChar(string hexstring)
{
return (char)Convert.ToInt32(hexstring, 16);
} public static string CharToHex(char c)
{
return string.Format("{0:X}", (int)c);
} public static string HexTostring(string hexstring)
{
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < hexstring.Length; i += 4)
{
string temp = hexstring.Substring(i, 4);
sb.Append(HexToChar(temp));
}
return sb.ToString();
} public static string StringToHex(string s)
{
StringBuilder sb = new StringBuilder("");
foreach (char c in s)
{
sb.Append(CharToHex(c));
}
return sb.ToString();
}
/// <summary>
/// 将汉字转换为Unicode
/// </summary>
/// <param name="text">要转换的字符串</param>
/// <returns></returns>
public static string GBToUnicode(string text)
{
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(text);
string lowCode = "", temp = "";
for (int i = 0; i < bytes.Length; i++)
{
if (i % 2 == 0)
{
temp = System.Convert.ToString(bytes[i], 16);//取出元素4编码内容(两位16进制)
if (temp.Length < 2) temp = "0" + temp;
}
else
{
string mytemp = Convert.ToString(bytes[i], 16);
if (mytemp.Length < 2) mytemp = "0" + mytemp; lowCode = lowCode + mytemp + temp;//取出元素4编码内容(两位16进制)
}
}
return lowCode;
} /// <summary>
/// 将Unicode转换为汉字
/// </summary>
/// <param name="name">要转换的字符串</param>
/// <returns></returns>
public string UnicodeToGB(string text)
{
MatchCollection mc = Regex.Matches(text, "([\\w]+)|(\\\\u([\\w]{4}))");
if (mc != null && mc.Count > 0)
{
StringBuilder sb = new StringBuilder();
foreach (Match m2 in mc)
{
string v = m2.Value;
if (v.StartsWith("http://www.cnblogs.com/xczt/admin/file://u/"))
{
string word = v.Substring(2);
byte[] codes = new byte[2];
int code = Convert.ToInt32(word.Substring(0, 2), 16);
int code2 = Convert.ToInt32(word.Substring(2), 16);
codes[0] = (byte)code2;
codes[1] = (byte)code;
sb.Append(Encoding.Unicode.GetString(codes));
}
else
{
sb.Append(v);
}
}
return sb.ToString();
}
else
{
return text;
}
} #region 发送短息 /// <summary>
/// SendMessage函数用于发送短信.参数strMobileNumber设置手机号码,strMsgContent指
/// 定要发送的内容
/// </summary>
/// <param name="strMobileNumber">手机号码</param>
/// <param name="strMsgContent">要发送的内容</param>
/// <returns> 返回指示发送是否成功</returns>
public bool SendMessage(string strMobileNumber,string strMsgContent)
{
SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
serialPort.WriteTimeout = 2000;
try
{
serialPort.ReadBufferSize = 900000;
if (serialPort.IsOpen) serialPort.Close();
serialPort.Open();
serialPort.WriteLine("ATZ\r");
Thread.Sleep(500);
serialPort.ReadExisting();
serialPort.WriteLine("AT+CSMP=1,167,0,8" + "\r");
serialPort.Write("AT+CMGS=" + strMobileNumber + "\r");
Thread.Sleep(1000);
string content = GBToUnicode(strMsgContent);
serialPort.Write(content + Convert.ToChar(26).ToString());
Thread.Sleep(2000);
string msg = serialPort.ReadExisting();
serialPort.Close();
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
finally
{
//保证操作完成以后关闭端口,避免占用
if (serialPort.IsOpen)
serialPort.Close();
}
}
#endregion
}
try
{
//正则表达式验证
string code = @"^(13[0-9]|15[0|3|6|7|8|9]|18[8|9])\d{8}$";
if (Regex.IsMatch(cSendPhoneNum, code))
{
//对短信的长度进行控制
if (cSendContent.Length == 0 || cSendContent.Length > 200)
{
ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>alert('短信内容过短或太长!')</script>");
return;
}
//手机号码格式正确
if (sms.SendMessage(cSendPhoneNum, cSendContent))
{
//将信息保存到数据库中
DM dm = new DM();
string strSQL = "insert into 短信表 values('" + cSendPhoneNum + "','" + cSendContent + "','" + DateTime.Now.ToLongDateString() + ")";
// try
// {
// dm.execsql(strSQL);
//短信发送成功,并成功插入数据库
ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>alert('短信发送成功...'); </script>");
}
catch (Exception)
{ }
}
else
{
//短信发送成功
ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>alert('短信发送失败...'); </script>");
}
}
else
{
ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>alert('手机号码格式错误,请检查...')</script>");
}
}
catch (Exception ex)
{
ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>alert('" + ex.Message + "')</script>");
} #endregion