在程序里怎么收短消息(手机) 彩信可以啊!收邮件!hoho!单独的短信,除非手机连线PC,然后... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果手机是通过数据线连接到机器的COM口(包括虚拟的),可以使用GSM AT命令操作手机,具体情况自己查看GSM AT命令集吧。 除非你和移动联通有来往的啊.手机发短信时运营商会收到的,然后让他们收到时给你的机子IP 发包不就OK了吗? 哈哈 除非你是sp,或者和sp有合作关系!要有个下发,和接受的通道 在整个开始的时候,你要准备以下软硬件: 硬件:西门子3508或C35系列手机一个 西门子手机通信数据线一条 软件:VS.NET(C#) 短信编码类库(PDUdecoding.cs) 串口通信类库(JustinIO.cs) 当所要求的软硬件都准备好后,我们就可以正式开始了。下面以我自己的测试用例为大家详细介绍。 做什么事情都应该有计划,虽然我们的测试用例很简单,但还是画个简单的流程图: 有了流程图,还只是明白了程序怎么运行,再看看界面,会让你更心动的了。 图二、短信终端C#版界面图 再不开始,就有人骂我了。下在我讲的开发环境是在VS.NET(C#)中。COME GO,GO… 步骤一、打开VS.NET,新建项目->Visual C#项目->Windows应用程序,名称中输入你的工程名就行啦,我的是smsForCsharp 步骤二、参照上面的界面图,设计你的程序界面,下面是我程序中各控件的主要属性控件名称 控件Name属性 说明TextBox targetNumber 接收手机号码TextBox CenterNumber 短信中心号TextBox smsState 发送短信后,返回的信息。注意设置控件为多行TextBox smsContent 短信内容,同样,注意设置为多行ComboBox ConnectPort 连接手机的端口,例:COM1\COM2ComboBox ConnectBaudRate 串口连接的波特率,在串口通信中很重要的Button btnSend 发送按钮Button btnConnect 连接按钮,主要用于程序的初始化Button btnExit 退出按钮 步骤三、将PDUdecoding.cs与JustinIO.cs拷入刚刚新建工程目录,并打开解决方案资源管理器,右键添加现有项,选中两个文件就行了,这里再打开类视图,里面是不是多了两个类,JustinIO与SMS类啊,如图三,要是没有,那你再试。 图三,添加类后的类视图 步骤四、引用命名空间,用代码查看方式打开Form1.cs(这里以我电脑为准,如果你自己更改过,请以你电脑为准),在代码前面加上using JustinIO;using SMS;using System.IO;using System.Text; 步骤五、在smsFormCsharp类中,添加两个字段ss_port、sms,分别为JustinIO及SMS的对象,如下 步骤六、添加串口初始化代码,如下:/// <summary>/// 初始化串口/// </summary>public bool InitCom(string m_port, int m_baudrate){ ss_port.PortNum = m_port;//串口号 ss_port.BaudRate = m_baudrate;//波特率 ss_port.ByteSize = 8;//数据位 ss_port.Parity = 0;// ss_port.StopBits = 1;//停止位 ss_port.ReadTimeout = 1000;//读超时 try { if (ss_port.Opened) { ss_port.Close(); ss_port.Open(); } else { ss_port.Open();//打开串口 } return true; } catch(Exception e) { MessageBox.Show("错误:" + e.Message); return false; }} 将上述代码直接拷入你的程序中,并确保添加在Main主函数的后面,按F5,调试应该没什么问题,不过上面还没有实际任何看得见的功能,仅仅是打开了串口而以。 步骤七、打开串口后,我们就应该初始化程序,取得手机的名牌,型号,以及短信中心号,双击连接按钮,并把下面代码拷入程序中:/// <summary>/// 初始化代码,并获取手机相关信息/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnConnect_Click(object sender, System.EventArgs e){ bool opened = InitCom(ConnectPort.SelectedItem.ToString(),Convert.ToInt32(ConnectBaudRate.SelectedItem.ToString()));//打开并初始化串口 bool Connected = false; if (opened) { ss_port.Write(Encoding.ASCII.GetBytes("AT+CGMI\r")); //获取手机品牌 string response = Encoding.ASCII.GetString(ss_port.Read(128)); if (response.Length > 0) { ConnectState.Text = response.Substring(10,7); Connected = true; } else { ConnectState.Text = "与手机连接不成功"; Connected = false; } ss_port.Write(Encoding.ASCII.GetBytes("AT+CGMM\r"));//获取手机型号 response = Encoding.ASCII.GetString(ss_port.Read(128)); if(response.Length > 0) { ConnectState.Text =ConnectState.Text+ " " + response.Substring(10,5) + " 连接中......"; Connected = true; } else { ConnectState.Text = "与手机连接不成功"; Connected = false; } ss_port.Write(Encoding.ASCII.GetBytes("AT+CSCA?\r"));//获取手机短信中心号 response = Encoding.ASCII.GetString(ss_port.Read(128)); if(response.Length > 0) { CenterNumber.Text = response.Substring(20,13); Connected = true; } else { Connected = false; } if (Connected == true) { btnConnect.Enabled = false; btnSend.Enabled = true; } else { btnConnect.Enabled = true; btnSend.Enabled = false; } }} 到这里,你可以按F5,编译调试,通过,在确保你的手机与电脑连接正常下,点击连接按钮看看,是不是像我的一样,手机型号及短信中心号者正常显示出来了。 图四、连接后程序界面 步骤八、看到上在的结果,是不是感觉到离成功发送短信很近啦,看这么长的文章,费了大家不少时间,再不亮出发短信部份,对不起大家了。 双击发送按钮,将下面代码拷入程序中。/// <summary>/// 发送短信/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSend_Click(object sender, System.EventArgs e){ string decodedSMS = sms.smsDecodedsms(CenterNumber.Text,targetNumber.Text,smsContent.Text); byte[] buf =Encoding.ASCII.GetBytes(String.Format("AT+CMGS={0}\r",sms.nLength)); ss_port.Write(buf); string response = Encoding.ASCII.GetString(ss_port.Read(128)); string SendState = ""; if( response.Length > 0 && response.EndsWith("> ")) { ss_port.Write(Encoding.ASCII.GetBytes(String.Format("{0}\x01a",decodedSMS))); SendState = "发送成功!"; } else { SendState = "发送失败"; } string Result = String.Format("{0},{1},{2},\n\r",targetNumber.Text,smsContent.Text,SendState); smsState.Text += Result;} 快按F5吧!神啊,快通过吧!不用求神了,已经通过了,现在你就可以发短信了,请确保手机可以正常连接电脑。按连接,然后填入你要的发送的目标手机号,并在内容中添入你要发送的内容,发送吧!成功了!成功了是这样子的!看你的跟我的一样吗? 图五、发送成功 还有一些事 不要忘了,记得添加退出代码。双击退出,添加下面代码:/// <summary>/// 关闭串口,退出程序/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnExit_Click(object sender, System.EventArgs e){ ss_port.Close(); Application.Exit();} 到这里都告一个段落了,所有的功能都完成了!不过由于这仅仅是一个演示用例,还有很多没有考虑,像串口通信中的,在实际操作不可这样操作的,应该用多线程来处理,一个专门用来读串口,一个专门用来写串口。还有程序中很多防出错代码没有添加进去,希望有心有朋友添加,并公布出来,这也是我写这篇文章希望看到的结果。请勿将本程序直接用于实际中,真诚提醒你! 终于写完了,我也放松了许多,本来很早就应该完成了,因为一些个人原因,没有及时写完,向那些曾经问过我相关问题,没有及时回复的朋友,抱歉一声,希望你们继续支持我! 调试环境: Windows 2000 Professional、Visual Studio.NET、西门子3508手机、西门子专用数据线。 pocket pc还可以!Nokia 7110带宽不行吧! 有短信卡的。计算机硬件,可以插4-16个SIM卡不等。我们公司有一个。 DataGridViewComboBoxColumn单元格赋值问题 如何判断服务器实时连接 SPL的Transaction.Process()和Transaction.Commit()哪个先执行 C#:如何在打印预览对话框中打印时选择打印机 关于backgroundWorker的问题 堆与堆栈.请说出你的理解... 程序发布后安装过程中碰到的问题 多窗口传值问题 SQL 语句求教,多表组合查询 在线等,\急\急\急:AOL,YAHOO....email接收问题 c#中变量的内存分配! C#中的非安全编程
要有个下发,和接受的通道
西门子手机通信数据线一条
软件:VS.NET(C#)
短信编码类库(PDUdecoding.cs)
串口通信类库(JustinIO.cs) 当所要求的软硬件都准备好后,我们就可以正式开始了。下面以我自己的测试用例为大家详细介绍。 做什么事情都应该有计划,虽然我们的测试用例很简单,但还是画个简单的流程图: 有了流程图,还只是明白了程序怎么运行,再看看界面,会让你更心动的了。
图二、短信终端C#版界面图 再不开始,就有人骂我了。下在我讲的开发环境是在VS.NET(C#)中。COME GO,GO… 步骤一、打开VS.NET,新建项目->Visual C#项目->Windows应用程序,名称中输入你的工程名就行啦,我的是smsForCsharp 步骤二、参照上面的界面图,设计你的程序界面,下面是我程序中各控件的主要属性
控件名称 控件Name属性 说明
TextBox targetNumber 接收手机号码
TextBox CenterNumber 短信中心号
TextBox smsState 发送短信后,返回的信息。注意设置控件为多行
TextBox smsContent 短信内容,同样,注意设置为多行
ComboBox ConnectPort 连接手机的端口,例:COM1\COM2
ComboBox ConnectBaudRate 串口连接的波特率,在串口通信中很重要的
Button btnSend 发送按钮
Button btnConnect 连接按钮,主要用于程序的初始化
Button btnExit 退出按钮 步骤三、将PDUdecoding.cs与JustinIO.cs拷入刚刚新建工程目录,并打开解决方案资源管理器,右键添加现有项,选中两个文件就行了,这里再打开类视图,里面是不是多了两个类,JustinIO与SMS类啊,如图三,要是没有,那你再试。
图三,添加类后的类视图 步骤四、引用命名空间,用代码查看方式打开Form1.cs(这里以我电脑为准,如果你自己更改过,请以你电脑为准),在代码前面加上
using JustinIO;using SMS;using System.IO;using System.Text; 步骤五、在smsFormCsharp类中,添加两个字段ss_port、sms,分别为JustinIO及SMS的对象,如下 步骤六、添加串口初始化代码,如下:
/// <summary>/// 初始化串口/// </summary>public bool InitCom(string m_port, int m_baudrate){ ss_port.PortNum = m_port;//串口号 ss_port.BaudRate = m_baudrate;//波特率 ss_port.ByteSize = 8;//数据位 ss_port.Parity = 0;// ss_port.StopBits = 1;//停止位 ss_port.ReadTimeout = 1000;//读超时 try { if (ss_port.Opened) { ss_port.Close(); ss_port.Open(); } else { ss_port.Open();//打开串口 } return true; } catch(Exception e) { MessageBox.Show("错误:" + e.Message); return false; }} 将上述代码直接拷入你的程序中,并确保添加在Main主函数的后面,按F5,调试应该没什么问题,不过上面还没有实际任何看得见的功能,仅仅是打开了串口而以。 步骤七、打开串口后,我们就应该初始化程序,取得手机的名牌,型号,以及短信中心号,双击连接按钮,并把下面代码拷入程序中:
/// <summary>/// 初始化代码,并获取手机相关信息/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnConnect_Click(object sender, System.EventArgs e){ bool opened = InitCom(ConnectPort.SelectedItem.ToString(),Convert.ToInt32(ConnectBaudRate.SelectedItem.ToString()));//打开并初始化串口 bool Connected = false; if (opened) { ss_port.Write(Encoding.ASCII.GetBytes("AT+CGMI\r")); //获取手机品牌 string response = Encoding.ASCII.GetString(ss_port.Read(128)); if (response.Length > 0) { ConnectState.Text = response.Substring(10,7); Connected = true; } else { ConnectState.Text = "与手机连接不成功"; Connected = false; } ss_port.Write(Encoding.ASCII.GetBytes("AT+CGMM\r"));//获取手机型号 response = Encoding.ASCII.GetString(ss_port.Read(128)); if(response.Length > 0) { ConnectState.Text =ConnectState.Text+ " " + response.Substring(10,5) + " 连接中......"; Connected = true; } else { ConnectState.Text = "与手机连接不成功"; Connected = false; } ss_port.Write(Encoding.ASCII.GetBytes("AT+CSCA?\r"));//获取手机短信中心号 response = Encoding.ASCII.GetString(ss_port.Read(128)); if(response.Length > 0) { CenterNumber.Text = response.Substring(20,13); Connected = true; } else { Connected = false; } if (Connected == true) { btnConnect.Enabled = false; btnSend.Enabled = true; } else { btnConnect.Enabled = true; btnSend.Enabled = false; } }} 到这里,你可以按F5,编译调试,通过,在确保你的手机与电脑连接正常下,点击连接按钮看看,是不是像我的一样,手机型号及短信中心号者正常显示出来了。
图四、连接后程序界面 步骤八、看到上在的结果,是不是感觉到离成功发送短信很近啦,看这么长的文章,费了大家不少时间,再不亮出发短信部份,对不起大家了。 双击发送按钮,将下面代码拷入程序中。
/// <summary>/// 发送短信/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSend_Click(object sender, System.EventArgs e){ string decodedSMS = sms.smsDecodedsms(CenterNumber.Text,targetNumber.Text,smsContent.Text); byte[] buf =Encoding.ASCII.GetBytes(String.Format("AT+CMGS={0}\r",sms.nLength)); ss_port.Write(buf); string response = Encoding.ASCII.GetString(ss_port.Read(128)); string SendState = ""; if( response.Length > 0 && response.EndsWith("> ")) { ss_port.Write(Encoding.ASCII.GetBytes(String.Format("{0}\x01a",decodedSMS))); SendState = "发送成功!"; } else { SendState = "发送失败"; } string Result = String.Format("{0},{1},{2},\n\r",targetNumber.Text,smsContent.Text,SendState); smsState.Text += Result;} 快按F5吧!神啊,快通过吧!不用求神了,已经通过了,现在你就可以发短信了,请确保手机可以正常连接电脑。按连接,然后填入你要的发送的目标手机号,并在内容中添入你要发送的内容,发送吧!成功了!成功了是这样子的!看你的跟我的一样吗?
图五、发送成功 还有一些事 不要忘了,记得添加退出代码。双击退出,添加下面代码:
/// <summary>/// 关闭串口,退出程序/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnExit_Click(object sender, System.EventArgs e){ ss_port.Close(); Application.Exit();} 到这里都告一个段落了,所有的功能都完成了!不过由于这仅仅是一个演示用例,还有很多没有考虑,像串口通信中的,在实际操作不可这样操作的,应该用多线程来处理,一个专门用来读串口,一个专门用来写串口。还有程序中很多防出错代码没有添加进去,希望有心有朋友添加,并公布出来,这也是我写这篇文章希望看到的结果。请勿将本程序直接用于实际中,真诚提醒你! 终于写完了,我也放松了许多,本来很早就应该完成了,因为一些个人原因,没有及时写完,向那些曾经问过我相关问题,没有及时回复的朋友,抱歉一声,希望你们继续支持我! 调试环境: Windows 2000 Professional、Visual Studio.NET、西门子3508手机、西门子专用数据线。
Nokia 7110带宽不行吧!