首页 新闻 会员 周边

请教CMPP3.0.0协议实现建立连接的问题

0
悬赏园豆:100 [已解决问题] 解决于 2017-01-20 20:06

问题描述:

  上上个星期,给我安排了一个活。按照CMPP3.0.0协议文档,开发一个项目。

现在卡在和IMSG服务网关建立连接这块了。

用socket或tcpclient类中的Connect方法都是能连接上IMSG的IP和端口的。

但是,我发送按照协议中的CMPP_CONNECT消息时,当执行到BeginReceive方法时,就报异常"远程主机强迫关闭了一个现有的连接。"

我一开始以为是发送的数据格式上和协议里的有出入,但来回比对了几次,没发现哪有问题。

所以现在我已经卡死再这块了,不知道哪的原因,也解决不了。已经一周了,憋死我了!!!

 

下图是用TCPClient类来实现连接的代码 [客户端]:

复制代码
 1 TcpClient m_TcpClient = new TcpClient();
 2 m_TcpClient.ReceiveTimeout = m_TcpClient.SendTimeout = m_iTcpClientTimeout * 1000;
 3 m_TcpClient.Connect(m_strAddress, m_iPort);
 4 m_NetworkStream = m_TcpClient.GetStream();
 5 
 6 DateTime dt = DateTime.Now;
 7 CMPP_CONNECT conn = new CMPP_CONNECT();
 8 conn.Head = new CMPP_HEAD();
 9 conn.Head.CommandID = CMPP30.CMD_CONNECT;
10 conn.Head.SequenceID = CreateSeqID();
11 conn.SourceAddress = m_strSPID;
12 conn.TimeStamp = System.Convert.ToUInt32(string.Format("{0:MMddhhmmss}", dt));
13 conn.AuthenticatorSource = CreateDigest(dt);
14 conn.Version = CMPP_VERSION_30;
15                 
16 byte[] bytes = conn.GetBytes();
17 
18 m_NetworkStream.Write(bytes, 0, (int)conn.Head.TotalLength);
19                 
20 // 等待 RESPONSE 5 秒。
21 int i;
22 for (i = 0; i < 5000 && !m_NetworkStream.DataAvailable; i += 10)
23 {
24     Thread.Sleep(10);
25 }
26 if (i >= 5000)
27 {
28     FireOnSMSStateChangedEvent(new SMSEventArgs(SMS_EVENT.SP_CONNECT_ERROR, "等待 CONNECT_RESP 超时", DateTime.Now));
29     return false;
30 }
复制代码
View Code

其中当运行到for循环判断时,就不行了,判断m_NetworkStream.DataAvailable状态时,始终都是false,最后就是提示"等待 CONNECT_RESP 超时"

不知道为什么NetworkStream流里没有可读(/可用)的数据,难道我没真正发到ISMG的服务器网关上吗?

希望有CMPP开发经验的前辈指点一二,在下感激不尽!!!

(要是有连接的代码做参考是最好的了!)

P.S.  ISMG的意思是:互联网短信网关(CMPP3.0.0协议里有说明)

霜影的主页 霜影 | 初学一级 | 园豆:63
提问于:2017-01-17 17:03
< >
分享
最佳答案
0

刚刚解决了,代码没问题。刚才又联系了下移动的人,他们那边给查了,发现是省移动那边之前没按照规范配置。。。坑啊!

感谢回复的网友们!

工作需求要弄CMPP3.0,上头安排的咱也没啥可说的,而且我也是第一次设计移动通信方面的项目.....

希望该贴多少也能帮助后来人!

霜影 | 初学一级 |园豆:63 | 2017-01-18 09:55

您好,我先也是遇到了这个问题,自己不会开发,您这边能不能帮一下忙,有偿解决问题,如果您看到请联系一下我,qq1544229672,现在手上有源码,是用c++写的,

我是一个程序 | 园豆:200 (初学一级) | 2017-06-24 23:25
其他回答(2)
0

现在还有人在搞cmpp 3.0,都4G了

收获园豆:100
谢*勇 | 园豆:304 (菜鸟二级) | 2017-01-18 09:21

建议write后加一句代码:m_NetworkStream.flush();,好像是这个

支持(0) 反对(0) 谢*勇 | 园豆:304 (菜鸟二级) | 2017-01-18 09:24
0

前辈,请问能给我发个实现么?我也是第一次搞这个,没啥头绪

素手揽清风 | 园豆:229 (菜鸟二级) | 2017-06-02 11:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册