📄 cmpp2send.cs
字号:
namespace Glenet.CMPP
{
using System;
using System.Text;
using System.Net.Sockets;
using System.Threading;
using Glenet.CMPP.Messages;
public class CMPP2Send : BaseCMPP2
{
public CMPP2Send(string userName, string passwd, string spCode, string getwayip, int port, string serviceNo)
: base(userName,passwd,spCode,getwayip,port,serviceNo)
{
}
/// <summary>
/// 简易发送消息
/// </summary>
/// <param name="Msg_Content">消息内容</param>
/// <param name="target">消息接收多,最多,99个</param>
/// <returns>返回消息messageID不成功返回0</returns>
public UInt32 Submit(string Msg_Content, params string[] Dest_terminal_Id)
{
return Submit(1, 1, 1, 3, "9999", 0, "", 0, 0, 15, "02", "0", "", "", Msg_Content, Dest_terminal_Id);
}
/// <summary>
/// 消息实体发送
/// </summary>
/// <param name="submit">消息实体</param>
/// <returns>返回消息messageID不成功返回0</returns>
public UInt32 Submit(CMPP_SUBMIT submit)
{
byte[] bytes = submit.ToBytes();
if (Ns.CanWrite)
{
Ns.Write(bytes, 0, bytes.Length);
}
if (Ns.CanRead)
{
bytes = ResponseAsBytes(Ns, MessageHeader.Length + CMPP_SUBMIT_RESP.BodyLength, 10);
CMPP_SUBMIT_RESP submit_resp = new CMPP_SUBMIT_RESP(bytes);
return submit_resp.Msg_Id;
}
return 0;
}
/// <summary>
///复杂消息发送
/// </summary>
/// <param name="Pk_total">1 Unsigned Integer 相同Msg_Id的信息总条数,从1开始。</param>
/// <param name="Pk_number">1 Unsigned Integer 相同Msg_Id的信息序号,从1开始。</param>
/// <param name="Registered_Delivery">1 Unsigned Integer 是否要求返回状态确认报告:0:不需要;,1,需要</param>
/// <param name="Msg_level">1 Unsigned Integer 信息级别。</param>
/// <param name="Service_Id">10 Octet String 业务标识,是数字、字母和符号的组合。</param>
/// <param name="Fee_UserType"> 0:对目的终端MSISDN计费; 1:对源终端MSISDN计费; 2:对SP计费; 3:表示本字段无效,对谁计费参见Fee_terminal_Id字段</param>
/// <param name="Fee_terminal_Id">32 Octet String 被计费用户的号码,当Fee_UserType为3时该值有效,当Fee_UserType为0、1、2时该值无意义。</param>
/// <param name="TP_pId"> // 1 Unsigned Integer GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9。</param>
/// <param name="TP_udhi">// 1 Unsigned Integer GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐。</param>
/// <param name="Msg_Fmt">1 Unsigned Integer 信息格式: 0:ASCII串; 3:短信写卡操作; 4:二进制信息; 8:UCS2编码; 15:含GB汉字。。。。。。</param>
/// <param name="FeeType">01:对"计费用户号码"免费;02:对"计费用户号码"按条计信息费; 03:对"计费用户号码"按包月收取信息费。</param>
/// <param name="FeeCode">6 Octet String 资费代码(以分为单位)。</param>
/// <param name="ValId_Time">17 Octet String 存活有效期,格式遵循SMPP3.3协议。</param>
/// <param name="At_Time"> 17 Octet String 定时发送时间,格式遵循SMPP3.3协议。</param>
/// <param name="Msg_Content">消息内容</param>
/// <param name="target">消息接收多,最多,99个</param>
/// <returns>返回消息messageID不成功返回0</returns>
public UInt32 Submit(uint Pk_total, uint Pk_number, uint Registered_Delivery,
uint Msg_level,
string Service_Id,
uint Fee_UserType,
string Fee_terminal_Id,
uint TP_pId,
uint TP_udhi,
uint Msg_Fmt,
string FeeType,
string FeeCode,
string ValId_Time,
string At_Time,
string Msg_Content,
params string[] Dest_terminal_Id
)
{
if(Ns == null)
throw new Exception("未建立连接");
if(Msg_Content.Length>65)
throw new Exception("信息内容过长");
CMPP_SUBMIT submit = new CMPP_SUBMIT();
//submit.Msg_Id = 0; // uint _Msg_Id; // 8 Unsigned Integer 信息标识。
submit.Pk_total = Pk_total; // uint _Pk_total; // 1 Unsigned Integer 相同Msg_Id的信息总条数,从1开始。
submit.Pk_number = Pk_number; // uint _Pk_number; // 1 Unsigned Integer 相同Msg_Id的信息序号,从1开始。
submit.Registered_Delivery = Registered_Delivery; // uint _Registered_Delivery; // 1 Unsigned Integer 是否要求返回状态确认报告:
// // 0:不需要;
// // 1:需要。
submit.Msg_level = Msg_level;//1; // uint _Msg_level; // 1 Unsigned Integer 信息级别。
submit.Service_Id = Service_Id;//"CMPP_TERMINATE"; // string _Service_Id; // 10 Octet String 业务标识,是数字、字母和符号的组合。
submit.Fee_UserType = Fee_UserType; // uint _Fee_UserType; // 1 Unsigned Integer 计费用户类型字段:
// // 0:对目的终端MSISDN计费;
// // 1:对源终端MSISDN计费;
// // 2:对SP计费;
// // 3:表示本字段无效,对谁计费参见Fee_terminal_Id字段。
submit.Fee_terminal_Id = Fee_terminal_Id;//"138***9565"; // string _Fee_terminal_Id; // 32 Octet String 被计费用户的号码,当Fee_UserType为3时该值有效,当Fee_UserType为0、1、2时该值无意义。
//submit.Fee_terminal_type = 0; // uint _Fee_terminal_type; // 1 Unsigned Integer 被计费用户的号码类型,0:真实号码;1:伪码。
submit.Tp_pId = TP_pId; // uint _TP_pId; // 1 Unsigned Integer GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9。
submit.Tp_udhi = TP_udhi; // uint _TP_udhi; // 1 Unsigned Integer GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐。
submit.Msg_Fmt = Msg_Fmt; // uint _Msg_Fmt; // 1 Unsigned Integer 信息格式:
// // 0:ASCII串;
// // 3:短信写卡操作;
// // 4:二进制信息;
// // 8:UCS2编码;
// // 15:含GB汉字。。。。。。
submit.Msg_src = SpCode;//spadd;//; // string _Msg_src; // 6 Octet String 信息内容来源(SP_Id)。
submit.FeeType = FeeType; // string _FeeType; // 2 Octet String 资费类别:
// // 01:对"计费用户号码"免费;
// // 02:对"计费用户号码"按条计信息费;
// // 03:对"计费用户号码"按包月收取信息费。
submit.FeeCode = FeeCode; // string _FeeCode; // 6 Octet String 资费代码(以分为单位)。
//Why not 17?
submit.ValId_Time = ValId_Time;//Util.Get_MMDDHHMMSS_String(DateTime.Now.AddHours(2)) + "032+"; // string _ValId_Time; // 17 Octet String 存活有效期,格式遵循SMPP3.3协议。
submit.At_Time = At_Time;//Util.Get_MMDDHHMMSS_String(DateTime.Now) + "032+"; // string _At_Time; // 17 Octet String 定时发送时间,格式遵循SMPP3.3协议。
//spnum
submit.Src_Id = ServiceNo;//; // string _Src_Id; // 21 Octet String 源号码。SP的服务代码或前缀为服务代码的长号码, 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,该号码最终在用户手机上显示为短消息的主叫号码。
submit.Dest_terminal_Id = Dest_terminal_Id; // string[] _Dest_terminal_Id; // 32*DestUsr_tl Octet String 接收短信的MSISDN号码。
submit.DestUsr_tl = (uint) submit.Dest_terminal_Id.Length; // uint _DestUsr_tl; // 1 Unsigned Integer 接收信息的用户数量(小于100个用户)。
//
//
//submit.Dest_terminal_type = 0; // uint _Dest_terminal_type; // 1 Unsigned Integer 接收短信的用户的号码类型,0:真实号码;1:伪码。
// uint _Msg_Length; // 1 Unsigned Integer 信息长度(Msg_Fmt值为0时:<160个字节;其它<=140个字节),取值大于或等于0。
submit.Msg_Content = Msg_Content; // string _Msg_Content; // Msg_length Octet String 信息内容。
//submit.Msg_Length = uint.Parse(submit.Msg_Content.Length.ToString()) ;
submit.LinkId = ""; // string _LinkID; // 20 Octet String 点播业务使用的LinkID,非点播类业务的MT流程不使用该字段。
return Submit(submit);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -