分享
 
 
 

CMPP SP端 C# 实例

王朝c#·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

//附CMPPClient.cs:

/*

作者:TNT 时间:2003年12月

文件说明:本文件实现SP端的协议开发。

*/

using System;

using System.Security.Cryptography;

using System.Net.Sockets;

using System.Net;

using System.Text;

using System.Threading;

using System.Collections;

namespace CMPP.YOURCOMPANY

{

public delegate void ReportEventHandler(object sender, ReportEventArgs e); //声明一个事件的指代(指针)

public delegate void SMSEventHandler(object sender, SMSEventArgs e); //声明一个事件的指代(指针)

public delegate void TerminateEventHandler(object sender,TerminateEventArgs e); //声明收到终止信号

public delegate void TerminateRespEventHandler(object sender,TerminateRespEventArgs e); //回应事件发生

public delegate void TestEventHandler(object sender,TestEventArgs e);

public delegate void TestRespEventHandler(object sender,TestRespEventArgs e);

public delegate void ConnectRespEventHandler(object sender,ConnectRespEventArgs e);

public delegate void CancelRespEventHandler(object sender,CancelRespEventArgs e);

public delegate void SubmitRespEventHandler(object sender,SubmitRespEventArgs e);

public delegate void QueryRespEventHandler(object sender,QueryRespEventArgs e);

public delegate void LogonSuccEventHandler(object sender,EventArgs e); //当成功登录系统

public delegate void SocketClosedEventHandler(object sender,EventArgs e); //当套接字被检测到关闭

public delegate void FailedItemDeletedEventHandler(object sender,WaitingQueueItemEventArgs e); //当一条等待队列的消息超过60秒没有回应

public delegate void CMPPClientSvcStopEventHandler(object sender, ClientQueueStateArgs e); //当CMPP服务停止时候触发事件

/// <summary>

/// 作为CMPP协议的客户端,具有的登陆、发送、接受功能

/// 会开3 个线程处理: 1、处理需要发送 MO(下行)的消息

/// 2、处理从移动服务器发送过来CMPP的消息

/// 3、处理连接断等信息,检查需要重发的消息,检查收到的报告、短信,并调用 OnReport 事件 OnSMS事件

/// </summary>

public class CMPPClient

{

public static long CMPP_ACTIVE_TEST_C_TICKs= 30 ; // *3 ; //长连接的active_test测试时间

public static long CMPP_ACTIVE_TEST_T_TICKs= 60 ; // 消息失败时间 60秒

public static int CMPP_ACTIVE_TEST_N_COUNT=3; //3次

//public static int CMPP_MSG_MAX=100; //一次取得的最大消息数量

public static int CMPP_Port=7890;

public event ReportEventHandler onReportHandler; //指向事件处理代码的指针

public event SMSEventHandler onSMSHandler; //短信到来处理

public event TestEventHandler onTestHandler;

public event TestRespEventHandler onTestRespHandler;

public event ConnectRespEventHandler onConnectRespHandler;

public event CancelRespEventHandler onCancelRespHandler;

public event TerminateEventHandler onTerminateHandler;

public event TerminateRespEventHandler onTerminateRespHandler;

public event SubmitRespEventHandler onSubmitRespHandler;

public event QueryRespEventHandler onQueryRespHandler;

public event LogonSuccEventHandler onLogonSuccEventHandler;

public event SocketClosedEventHandler onSocketClosedHandler;

public event FailedItemDeletedEventHandler onWaitingItemDeltedHandler; //当等待队列消息超时

public event CMPPClientSvcStopEventHandler onClientSvcStopedHandler; //当服务停止时候的事件

//private 函数区域//////////////////////////////////////////////////////////////////////

private Socket tcp=null;

private IPHostEntry ip=null;

private IPEndPoint cmpp_ep=null;

private int RecvTimeOut =1000; //2000ms的接受超时

private int SendTimeout =2000; //2000ms的发送超时

private string CMPP_Server=""; //移动的服务器IP或者DNS名

private string systemID=""; //企业编号

private string userName=""; //sp的号码 /企业编号

private string PassWord=""; //口令

private bool isStop=false; //本服务是否终止运行

private bool isLogin=false; //是否已经登录

private Thread Send_Thread; //发送线程,专门处理对移动的数据包

private Thread Recv_Thread; //专门处理接收包

private Thread Deamo_Thread; //监控线程

private string ErrorInfo=""; //存放最后一次发生的错误信息 或者参考信息

private DateTime _current_time=DateTime.Now; //上一次 ping的时间

private uint lastSequence; //流水号,每一次重新启动都需要重新设定 lastSequence

private SortedList _outSeqQueue=new SortedList(); //消息队列存储 QueueItem,存储发送队列中的状态

private SortedList _waitingSeqQueue=new SortedList(); //消息队列存储 QueueItem

private int sub_resp=0; //最后返回的包 Sequence

private DateTime _lastOkTime; //最后正确发送消息时间

private bool _bNre=false; //空引用错误,套接字错误

//private ManualResetEvent _connectionDone=new ManualResetEvent(false); //是否连接到套接字服务器,也就是CMPP服务器

//private ManualResetEvent _lastsendDone=new ManualResetEvent(false); //上一次发送是否完毕

//private ManualResetEvent _lastrecvDone=new ManualResetEvent(false); //上一次接收是否完毕

private void ping() //发送一次ping包 ,不经过_outSeqQueue 直接存储在 out queue中

{

uint seq=this.getNextSequence();

MSG.CMPP_MSG_TEST test=new MSG.CMPP_MSG_TEST(seq);

QueueItem q=new QueueItem(seq,(uint)MSG.CMPP_COMMAND_ID.CMPP_ACTIVE_TEST,0,0);

q.setmsgObj(test);

this.addToOutQueue(q);

}

private string getValIdTime(DateTime d) //返回短信存活时间

{

DateTime n=d.AddHours(2); //2小时

return(n.Year.ToString().Substring(2) + n.Month.ToString().PadLeft(2,'0')+n.Day.ToString().PadLeft(2,'0')+n.Hour.ToString().PadLeft(2,'0')+n.Minute.ToString().PadLeft(2,'0')+n.Second.ToString().PadLeft(2,'0')+"032+");

}

private bool isPingTime( ) //是否到了ping一次的时间

{

System.TimeSpan l=(DateTime.Now - this._current_time );

if ( l.TotalSeconds >= (CMPPClient.CMPP_ACTIVE_TEST_C_TICKs))

{

lock(this)

{

this._current_time =DateTime.Now;

return(true);

}

}

else

{

return(false);

}

}

private void checkReSend() //是否需要再一次ping //查询 _waiti

[1] [2] [3] [4] [5] [6] [7] [8] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有