📄 form1.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Runtime.InteropServices;
using System.IO;
using System.Data.SqlClient;
using System.Data.OleDb;
namespace SmsSender
{
public partial class Form1 : Form
{
//声明api
[DllImport("kernel32")]
private static extern int GetPrivateProfileInt(string lpApplicationName, string lpKeyName, int nDefault, string lpFileName);
[DllImport("kernel32")]
private static extern bool GetPrivateProfileString(string lpApplicationName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);
[DllImport("kernel32")]
private static extern bool WritePrivateProfileString(string lpApplicationName, string lpKeyName, string lpString, string lpFileName);
[DllImport("kernel32")]
private static extern bool GetPrivateProfileSection(string lpAppName, StringBuilder lpReturnedString, int nSize, string lpFileName);
[DllImport("kernel32")]
private static extern bool WritePrivateProfileSection(string lpAppName, string lpString, string lpFileName);
private const string FILE_NAME = ".\\Config.ini";
public mycom mycom1 = new mycom();//串口类
public PDUdecoding myPDUdecoding = new PDUdecoding();//PDU编码类
public byte[] bRecievedata;//定义接收数据变量
////引用RS232类
//public RS232 rs = new RS232();
//是否允许关闭
private Boolean iAllowClose = false;
// This delegate enables asynchronous calls for setting
// the text property on a TextBox control.
delegate void SetTextCallback(string text);
// This thread is used to demonstrate both thread-safe and
// unsafe ways to call a Windows Forms control.
private Thread thread = null;
/// <summary>
/// 定义设置短信内容相关变量
/// </summary>
String strSmsContent = String.Empty;
String strReceiverNumber = String.Empty;
/// <summary>
/// 定义短信发射机相关变量
/// </summary>
StringBuilder strCenterNumber = new StringBuilder(256);
public StringBuilder strPort = new StringBuilder(256);
StringBuilder strRate = new StringBuilder(256);
/// <summary>
/// 定义数据库相关变量
/// </summary>
StringBuilder strServerIpAddress = new StringBuilder(256);
StringBuilder strUserName = new StringBuilder(256);
StringBuilder strPassWord = new StringBuilder(256);
/// <summary>
/// 定义测试版本发送数量
/// </summary>
public int iTestUserMaxSendCount = 2 + 3;
public int iTestUserCurrentSendCount;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
label3.Text = " 本程序由辽宁工程技术大学鹏远软件工程研究所\r\n";
label3.Text += "开发。版权归辽宁工程技术大学所有,未经授权任何\r\n";
label3.Text += "人不得擅自使用。\r\n";
label3.Text += " 本程序可单独使用,也可挂接连接库使用。\r\n";
label3.Text += " 本演示版本一次可发送" + iTestUserMaxSendCount + "条。\r\n\r\n";
label3.Text +="联系人:姜新宇\r\nQQ :458371\r\n网 址:";
txbReceiverNumber.Text = " ";
iTestUserCurrentSendCount = 0;
thread = new Thread(new ThreadStart(this.MasterMethod));
thread.IsBackground = true;
thread.Start();
}
private void MasterMethod()
{
//读取短信发射机配置参数
if (File.Exists(FILE_NAME))
{
GetPrivateProfileString("SmsSetting", "CenterNumber", "0", strCenterNumber, strCenterNumber.Capacity, FILE_NAME);
GetPrivateProfileString("SmsSetting", "Port", "0", strPort, strPort.Capacity, FILE_NAME);
GetPrivateProfileString("SmsSetting", "Rate", "0", strRate, strRate.Capacity, FILE_NAME);
this.SetText("程序开始运行......" + "\r\n");
this.SetText("读取短信机配置文件成功......" + "\r\n");
this.SetText("信息中心:" + strCenterNumber.ToString() + "\r\n");
this.SetText("串口:COM" + strPort.ToString() + "\r\n");
this.SetText("速率:" + strRate.ToString() + "\r\n");
}
//读取数据库配置
if (File.Exists(FILE_NAME))
{
GetPrivateProfileString("ServerInfo", "ServerIpAddress", "0.0.0.0", strServerIpAddress, strServerIpAddress.Capacity, FILE_NAME);
GetPrivateProfileString("ServerInfo", "UserName", "0", strUserName, strUserName.Capacity, FILE_NAME);
GetPrivateProfileString("ServerInfo", "PassWord", "0", strPassWord, strPassWord.Capacity, FILE_NAME);
this.SetText("读取数据库配置完成......" + "\r\n");
}
//初始化短信发射机串口
mycom1.PortNum = Convert.ToInt16(strPort.ToString());
mycom1.BaudRate = Convert.ToUInt16(strRate.ToString());
mycom1.ByteSize = Convert.ToByte("8", 10);
mycom1.Parity = Convert.ToByte("0",10);
mycom1.StopBits = Convert.ToByte("1", 10);
mycom1.ReadTimeout = 1000;
mycom1.WriteTimeout = 100;
if (this.OpenCom())
{
int sendnumb = 0;
this.SetText("串口初始化成功......" + "\r\n");
this.SetText("\r\n");
this.SetText("正在初始化GSM MODEM,请稍后......" + "\r\n");
//////////////////////////////////////////////////////////////////////////
//Thread.Sleep(500);
//测试GSM-MODEM的存在性
bRecievedata = mycom1.Read(500);
sendnumb = mycom1.Write(Command_Send("AT"));
bRecievedata = mycom1.Read(500);
if (delspace(dis_package(bRecievedata)).IndexOf(delspace("4F4B")) > -1)
{
}
else
{
this.SetText("GSM MODEM初始化失败......" + "\r\n");
mycom1.Close(); //关闭串口
return;
}
sendnumb = mycom1.Write(Command_Send("ATE0"));
Thread.Sleep(200);
bRecievedata = mycom1.Read(500);
if (delspace(dis_package(bRecievedata)).IndexOf(delspace("4F4B")) > -1)
{
}
else
{
this.SetText("GSM MODEM初始化失败......" + "\r\n");
mycom1.Close(); //关闭串口
return;
}
//////////////////////////////////////////////////////////////////////////
//GSM MODEM判断合法性
sendnumb = mycom1.Write(Command_Send("AT+FLID?"));
Thread.Sleep(100);
bRecievedata = mycom1.Read(500);
if (delspace(dis_package(bRecievedata)).IndexOf(delspace("37 34 38 38 35 38 35 39 33 30 39 33 38 35 31 7F 7F")) > -1)
{
this.SetText("GSM MODEM符合要求......" + "\r\n");
}
else
{
this.SetText("您所使用的GSM MODEM为非指定的产品,初始化失败......" + "\r\n");
mycom1.Close(); //关闭串口
return;
}
//////////////////////////////////////////////////////////////////////////
//设置GSM MODEM的发送模式为PDU
sendnumb = mycom1.Write(Command_SetPDUMode());
Thread.Sleep(500);
bRecievedata = mycom1.Read(500);
if (delspace(dis_package(bRecievedata)).IndexOf(delspace("4F4B")) > -1)
{
this.SetText("GSM MODEM初始化完成,可以正常工作......" + "\r\n");
}
else
{
this.SetText("GSM MODEM初始化失败......" + "\r\n");
mycom1.Close(); //关闭串口
return;
}
}
else
{
this.SetText("串口初始化失败......" + "\r\n");
this.SetText("请关闭程序,检查硬件设备及参数设置,再重新开启程序......" + "\r\n");
return;
}
}
//////////////////////////////////////////////////////////////////////////
//用代理的方法向监控记录listbox中加入item.text开始
private void SetText(string text)
{
if (this.ltbMonitorLog.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.ltbMonitorLog.Items.Add(text);
}
}
//用代理的方法向监控记录listbox中加入item.text结束
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("IExplore.exe", "http://www.lntu.org"); //在新的窗口打开
}
//////////////////////////////////////////////////////////////////////////
//发送按钮
private void btnSendSms_Click(object sender, EventArgs e)
{
//////////////////////////////////////////////////////////////////////////
//检验测试用户是否达到最大发送量
if (iTestUserCurrentSendCount > iTestUserMaxSendCount)
{
this.SetText("警告:测试用户每次的最大发送量为" + iTestUserMaxSendCount + ",您本次测试已经超过此数值......\r\n");
return;
}
//////////////////////////////////////////////////////////////////////////
//检测GSM MODEM是否初始化
if (mycom1.Opened == false)
{
this.SetText("GSM MODEM设备未初始化,不能发送短信......" + "\r\n");
return;
}
//////////////////////////////////////////////////////////////////////////
//给接收号码及短信内容赋值
strSmsContent = txbSmsContent.Text;
strReceiverNumber = txbReceiverNumber.Text;
//////////////////////////////////////////////////////////////////////////
this.btnSendSms.Enabled = false;
if (delspace(strSmsContent) == String.Empty || strSmsContent == "请填写短信内容..." || strReceiverNumber == String.Empty)
{
this.SetText("请正确填写短信内容及对方号码......" + "\r\n");
this.SetText("发送任务被取消......" + "\r\n");
this.btnSendSms.Enabled = true;
return;
}
int sendnumb = 0;
try
{
sendnumb = mycom1.Write(Command_SendContentLength());
Thread.Sleep(3000);
bRecievedata = mycom1.Read(500);
sendnumb = mycom1.Write(SendSms());
this.SetText("发送数据(" + sendnumb + "):接收人:" + strReceiverNumber+" 内容:" + strSmsContent + "\r\n");
Thread.Sleep(3000);
bRecievedata = mycom1.Read(500);
//this.SetText("接收到数据包:" + dis_package(bRecievedata) + "\r\n");
sendnumb = mycom1.Write(Command_ExtractionDataPack());
Thread.Sleep(3000);
bRecievedata = mycom1.Read(500);
//this.SetText("接收到数据包:" + dis_package(bRecievedata) + "\r\n");
}
catch
{
this.SetText("发送失败!" + "\r\n");
}
this.btnSendSms.Enabled = true;
//////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -