你会看到Server 端的控制台输出如下信息:
%%%%%%%%%%%%%%%%%%%%%%%%%%%init %%%%%%%%%%%%%%%%%%%%%%%%%%%onPreAdd %%%%%%%%%%%%%%%%%%%%%%%%%%%onPostAdd %%%%%%%%%%%%%%%%%%%%%%%%%%%sessionCreated server session created %%%%%%%%%%%%%%%%%%%%%%%%%%%sessionOpened server session Opened -%%%%%%%%%%%%%%%%%%%%%%%%%%%messageReceived The message received is [你好!Hello World!] -----------------messageReceived The message received is [com.dxz.minademo3.SmsObject@2b884014]
(6-2.)复杂的:
下面我们讲解一下如何在中保存状态变量,也就是真正的实现上面所说的Context。
我们假设这样一种情况,有两条短信:
M sip:wap.fetion.com.cn SIP-C/2.0
S: 1580101xxxx
R: 1889020xxxx
L: 21
Hello World!
M sip:wap.fetion.com.cn SIP-C/2.0
S: 1580101xxxx
R: 1889020xxxx
L: 21
Hello World!
他们按照上面的颜色标识发送,也就是说红色部分、蓝色部分、绿色部分分别发送(调用三次IoSession.write()方法),那么如果你还用上面的CmccSipcDecoder,将无法工作,因为第一次数据流(红色部分)发送过取时,数据是不完整的,无法解析出一条短信息,当二次数据流(蓝色部分)发送过去时,已经可以解析出第一条短信息了,但是第二条短信还是不完整的,需要等待第三次数据流(绿色部分)的发送。注意:由于模拟数据发送的规模性问题很麻烦,所以这里采用了这种极端的例子说明问题,虽不具有典型性,但很能说明问题,这就足够了,所以不要追究这种发送消息是否在真实环境中存在,更不要追究其合理性。
CmccSispcDecoder 类改为如下的写法:
[java]view plaincopy
publicclassCmccSipcDecoderextendsCumulativeProtocolDecoder{
privatefinalCharsetcharset;
method method = extranotification.getclass().getdeclaredmethod("setmessagecount", int.class)。strpackagename = getclass().getpackage().getname()。
"context");
publicCmccSipcDecoder(Charsetcharset){
this.charset=charset;
}
@Override
protectedbooleandoDecode(IoSessionsession,IoBufferin,
ProtocolDecoderOutputout)throwsException{
Contextctx=getContext(session);
CharsetDecodercd=charset.newDecoder();
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-93147-23.html
企业要生存