# cmpp3 for net
**Repository Path**: jackeli/cmpp3-for-net
## Basic Information
- **Project Name**: cmpp3 for net
- **Description**: 中国移动短信网关协议
- **Primary Language**: C#
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-10-09
- **Last Updated**: 2022-05-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# cmpp3 for net
#### 介绍
CMPP3协议是中国移动短信网关和短信运营商之间通信的协议,是基于tcp/ip之上的协议,通过此协议,实现短信的发送和接收。 本实现不但可以发送普通的短信,还可以发送闪电短信(也叫闪信、免提短信)、wappush短信。
本实现是在2005年左右编写,希望能起到抛砖引玉的作用
#### 使用说明
1. 配置app.config
2. 短信发送
CMPP30Client是连接网关发送和接收短信的操作类,其有如下方法:
AddNormalSMS:发送普通短信
AddSparkSMS:发送闪电短信
AddWapPushSMS:发送wappush短信
3. 发送结果获取
发送结果和接收短信都是通过事件方式获取
#### 例子
using System;
using CMPP30;
using System.Net.Sockets;
using System.IO;
using System.Text;
using System.Threading;
namespace cmpp30test
{
///
/// Class1 的摘要说明。
///
class Class1
{
CMPP30Client a;
public Class1()
{
a = new CMPP30Client("192.168.1.27", 7890, "333", "0555");
//当发送短信时,网关返回成功时激发短信成功事件,其中SucSMSEventArgs.MsgContent是cmpp协议中的Msg_Content,而非发送的原始信息。
a.SMSSuccess +=new SucSMSEventHandler(this.bbbb);
//当发送短信时,本短信完全发送成功时激发发送成功事件(因为有可能是长短信),其中MsgContent是用户提交信息的原始信息。
//MsgId是最后条短信的MsgId,用此MsgId,可以判断状态报告,以确定是否收到。
a.SendSuccess +=new SucSendEventHandler(this.bbbb1);
//当发送短信时,本短信发送失败时激发发送失败事件(因为有可能是长短信),其中MsgContent是用户提交信息的原始信息。
a.SendError += new ErrSendEventHandler(this.bbbb2);
//当发送短信时,网关返回失败时激发短信失败事件,其中ErrSMSEventArgs.MsgContent是cmpp协议中的Msg_Content,而非发送的原始信息。
a.SMSError += new ErrSMSEventHandler(this.bbbb3);
//接收到一个完整短消息(长短信只激发一次)时激发的事件,其中LinkId是最后一个cmpp包随带的LinkId,MsgContent是解码后的短消息。
a.RecvMsg += new RecMsgEventHandler(this.bbbb4);
//接收到一个手机用户发送的短信包,其中MsgContent是原始数据,用户可以对该数据进行解码处理。
a.RecvSMS += new RecSMSEventHandler(this.bbbb5);
//收到状态报告时激发的事件。
a.Report += new ReportEventHandler(this.bbbb6);
}
///
/// 应用程序的主入口点。
///
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
Class1 bbbbbb = new Class1();
bbbbbb.aaaa();
}
public void aaaa()
{
Thread send1 = new Thread(new ThreadStart(this.SendThread1));
send1.Start();
Thread send2 = new Thread(new ThreadStart(this.SendThread2));
send2.Start();
}
private void bbbb(object sender, SucSMSEventArgs e)
{
Console.WriteLine("成功发送短信->");
Console.WriteLine(e.ToString());
}
private void bbbb1(object sender, SucSendEventArgs e)
{
Console.WriteLine("成功发送信息->");
Console.WriteLine(e.ToString());
}
private void bbbb2(object sender, ErrSendEventArgs e)
{
Console.WriteLine("发送信息失败->");
Console.WriteLine(e.ToString());
}
private void bbbb3(object sender, ErrSMSEventArgs e)
{
Console.WriteLine("发送短信失败->");
Console.WriteLine(e.ToString());
}
private void bbbb4(object sender, RecMsgEventArgs e)
{
Console.WriteLine("接收到信息->");
Console.WriteLine(e.ToString());
}
private void bbbb5(object sender, RecSMSEventArgs e)
{
Console.WriteLine("接收到短信->");
Console.WriteLine(e.ToString());
}
private void bbbb6(object sender, ReportEventArgs e)
{
Console.WriteLine("状态报告->");
Console.WriteLine(e.ToString());
}
private void SendThread1()
{
//SendSeq.InfoSeq表示用户信息发送顺序号,其值是递增唯一的,每向缓存中加入一个信息,将会产生唯一的InfoSeq值,其值和SucSendEventArgs,ErrSendEventArgs,ErrSMSEventArgs,SucSMSEventArgs中的SendId相对应。
//SendSeq.SMSSerialNOList表示信息所包含的消息流水号集合,对于长短信或超一条短信的信息,将可能包含多个消息流水号的集合,其值和ErrSMSEventArgs,SucSMSEventArgs中的SMSSerialNo相对应。
SendSeq aaa = a.AddSparkSMS("鋼鐵", 0, 0, "wt", 0, "", 0, "999001", "00", "", "", "", "9999", "13800138000", 0, "");
SendSeq fff = a.AddNormalSMS("测试测试测试测试测试测试测试测试测试测试测试司法界拉萨飞机无缺如今来;全家发送所进发落三年发洒的经费;拉地方测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试", 1, 0, "wt", 0, "", 0, "999001", "00", "", "", "", "9999", "13800138000", 0, "");
}
private void SendThread2()
{
//SendSeq.InfoSeq表示用户信息发送顺序号,其值是递增唯一的,每向缓存中加入一个信息,将会产生唯一的InfoSeq值,其值和SucSendEventArgs,ErrSendEventArgs,ErrSMSEventArgs,SucSMSEventArgs中的SendId相对应。
//SendSeq.SMSSerialNOList表示信息所包含的消息流水号集合,对于长短信或超一条短信的信息,将可能包含多个消息流水号的集合,其值和ErrSMSEventArgs,SucSMSEventArgs中的SMSSerialNo相对应。
SendSeq aaa = a.AddWapPushSMS("新浪","www.sina.com.cn", 1, 0, "wt", 0, "", 0, "999001", "00", "", "", "", "9999", "13800138000", 0, "");
SendSeq fff = a.AddMMSIndication("www.test.com?msgid=34523stfsdf94532453","10086", 0, 0, "wt", 0, "", 0, "999001", "00", "", "", "", "9999", "13800138000", 0, "");
}
}
}