☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
小问号: 蒋老师,SOS !紧急救援!
蒋老师: 什么事,慢慢说。
小问号: 您不知道,前几天我们公司来了一个客户,希望我们为他们公司做一个基于短信的移动办公系统,并且起了 一个好听的名字“企业助手”。具体功能包括:工作(会议)通知、事务提醒、工资发放、生日祝福、短信调查等功能。
BOSS 说: “这个小项目就交给你了,知道你虽然刚走出校门,但我相信你的能力和我的眼力,别让我失望噢!”
我很心虚地拍着胸脯说:“BOSS 放心,保证完成任务!”。
蒋老师: 嗯,不是很复杂,应该能够完成,有什么需要我帮忙的呢?
小问号: 本来真的不想打扰您,知道您很忙,但我问了一下公司的两个老技术员,很虚心的请教了他们,但他们也从 来没有接触过短信这块,他们都说很简单,但是我却不知从哪下手,有劲用不上啊!又不好意思给老板说我不懂,第一个小项目都搞不定,不是想走人吗?
蒋老师: 好吧,我们从零开始!
小问号: 就喜欢这样,谁让我是个菜鸟呢?最多知道点语法而已。
蒋老师: 放心吧,这就是一层窗户纸,一捅就破!
小问号: 真的帮我搞定了,第一个月发了工资第一件事去请您老吃饭!
蒋老师: 心意领了,少来,快开始吧!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
十分同情小逗号这样的菜鸟,我们每个人都有第 一次,对于小逗号来说,第一次上班,第一次开始参加实战(而不是演习),我义无反顾地帮助他完成一系列的指导:
第一个案例:实时单发
第二个案例:实时群发
第三个案例:定时发送短信
第四个案例:同一部门可选择发送
第五个案例:不同部门可选择发送
大结局:企业助手完整实现
如果你和小逗号一样属于菜鸟(高手绕过),让 我们一起乘坐“奋斗”号之舟,完成这次波澜不惊的短途旅行!
特别说明,你至少具备的基础:
·了解C# 语言并且熟悉VS2005/VS2008 等 操作环境。
·了解SQL SERVER2005 常用操作。
我们知道短信的应用实际上已经遍布各个角落 (“警务通”、“校信通”、“农信通”、“银信通”等已经大量成功应用,其中“校信通”尤为成功),但对于不少在校大学生来说短信究竟是如何发送的,可能 仍然是陌生的。
所以该教程一方面让大学生有机会了解短信这个 基本知识技能,同时又可以作为入门级别独自都能战斗(尽管个人英雄时代已经过去,但是单兵作战训练永远都会存在!我们提倡团队协作,个人能力也至关重 要!)的第一个学习案例,为后续的团队合作的中型项目打下一个良好基础。
本次系列教程将以每周两篇的形式连载!
在我的任何一篇教程中,永远采用的是“抛我砖,引你玉”方针,希望高手批评指导,更迫切希望你 仍然站在初学者的角度让我们一起来帮助菜鸟早日成长起来,谢谢!
-----------------------------------------------------------------------------------------------------------------------------
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
小问号: 蒋老师,昨天我按您传授的方法给客户演示了企业助手“仿真系统”(蒋老师获创的名字,也就是把客户的需 求用界面表示出来)。客户惊呆了,说这么快就好了,你太厉害了,当我告诉他这只是装饰效果图,尽管他表现的有一丁点失望,但随后还是很满意地告诉我说: “这个好,这个好,不像我们上一次找的一个公司开发的那个东西,他们最后出来的系统和我们想象的差别太大了!”。他还说,怎么看起来和真的一样呢!
之 后我和客户讨论之后,稍微作了一些修改,他们表示很满意!
要是能有一个演示把短信直接发到客户的手机上,一定帅呆了!
蒋 老师: 这一步你做的很好,我们除了文档,这一步其实很重要,否则客户和我们谈得可能很融洽,似乎都明白了对方的意思,但实现出来的结果 往往大相径庭,那样麻烦就大了!这也是需求分析的一个步骤,这个我们以后再谈(作为读者的你,有兴趣的话可以参考部分项目管理和软件工程,但建议你有 2-3个项目实战经验再去深入研究,否则容易犯纸上谈兵大忌)!
小问号: 蒋老师,快点开始吧,我 都有点迫不及待了!我还是着急如何把短信发出去!
蒋老师: 好的!别太着急,你老是急性子,我们了解一下发送 短可能的方式:(1)通过移动或者联通端口发送,一般难以申请,每个月而且近似海量才有申请的必要性,开发相对有一定的难度;(2)通过短信猫完成短信发 送,这个倒也简单易行,设备价格几百元不等,开发起来难度也不大;(3)通过第三方短信运营商,他们一般提供了插件或者动态链接库,发送速度(每秒钟吞吐 量)比短信猫要快,开发难度与短信猫要当。
小问号: 那这个小项目用哪种方式呢?
蒋老师: 第一种不太现实!第二 种和第三种都可以,建议你采用第三种!
小问号: 那就用第三种,今天我能学会发送吗?我这菜鸟能搞定吗?一个树形权限菜单授权我还搞了三天呢!
蒋 老师: 放心了,五分钟实现你的你一个愿望!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
我们第一个案例非常简单,界面部分显示两个文本框,一个用来输入手机号码,一个用来输入短信内容。
这个案例中唯一难点就是你要熟悉C#如何 调用DLL动态链接库文件,熟悉发送短信的函数。
第一步:复制所需要的MSDP.dll 文件到系统目录中。
请把 “MSDP.dll”文件复制到“C:/WINDOWS/system32文件夹下。
“MSDP.dll”文件下载地址: MSDP.dll
第二步:使用VS2005 创建一个WEB 项目
选择:创建“网站(W)…”。
语言选择:C#
位置:Http://localhost/sms
第三步:添加Simple 文件
添加页面文件:Simple.aspx与代码文件:Simple.aspx.cs
第 四步:实现实时单发
请在手机号码位置输入您的11位手机号码,内容处输入70字以内的内容,然后点击“发送”按 钮。
在实验中请节约发送短信条数,限发两条。(扣的都是蒋老师的钱噢)
代码重点讲解:
对于Simple.aspx页面文件由于只包含了两个标签、两个文本框和一个发送按钮,不再详细讲解,具体参考代码。
着 重讲解一下Simple.aspx.cs中的代码部分。
引用该命名空间是保证正确引用MSDP.DLL动态链接库与函数的前提。如果你对本命名空间不熟悉请参考:http://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices.aspx
//初始化登录
[DllImport("msdp.dll")]
private static extern int SkInit(string AHost, string AUser, string APass, int AProxyMode, string AProxyHost, int AProxyPort, string AProxyUser, string AProxyPass);
功能:初始化与服务器建立连接,需要向服务器提交带有账号和密码的信息,只有通过验证后才可以有效的进行以发送短信等操作。
注意:一次验 证后此连接将保持登录状态,随后的发送短信等命令不需要提供身份验证,直至到退出登录,重新连接后需要重新登录。
//发送短信函数
[DllImport("msdp.dll")]
private static extern int SkMultiSend(int AContentType, string ATime, string AExNo, string AMobileList, string AMsg, byte[] ASuccessList, byte[] AFailureList, out int ASuccBufSize, out int AFailBufSize);
功能:根据指定的手机号码和内容发送短信。
//退出登录
[DllImport("msdp.dll")]
private static extern int SkLogout();
功能:退出,释放资源。
protected void btnSend_Click(object sender, EventArgs e)
{
//获 取手机号码与短信内容
string cSendPhoneNum = tbPhoneNum.Text.Trim();
string cSendContent = tbContent.Text.Trim();
//返回发送成功的手机列表
byte[] bSuccess = new byte[cSendPhoneNum.Length];
//返回发送失败的手机列表
byte[] bFailure = new byte[cSendPhoneNum.Length];
//返回发送成功的条数
int iSuc = 0;
//返回发送失败的条数
int iFail = 0;
//初始化登录
int iInit = SkInit("se1.china-sms.com:9900;se2.china-sms.com:9900;se3.china-sms.com:9900;
se5.china-sms.com:9900", "mrjiang", "000000", 0, "0", 0, "", "");
//初始化iInit返回值为0表示初始化成功,发送短信
if(iInit==0)
SkMultiSend(101, System.DateTime.Now.ToString(), "", cSendPhoneNum, cSendContent, bSuccess, bFailure, out iSuc, out iFail);
//退出
SkLogout();
}
代码下载: sms.rar
小问号: 哇,太棒了,真的收到短信耶!
蒋老师: 好,先看看,然后试 试,动手自己做出来才是最重要的,明天我告诉你群发!
(在我的任何一篇教程中,永远采用的是“抛我砖,引你玉”方针,希望高手批评指导,更迫切希望你仍然站在初学者的角度,让我们一起来帮助菜鸟, 谢谢!)