小弟最近正在接触Cmpp开发,用的移动的模拟网关,程序中我和网关相连是采用亚信方式,就是MO和MT的通讯是分开的(登陆时提交不同的版本号以供网关判断是MO/MT)现在遇到一个问题,就是我在MO中不断监听网关发来的消息,可是都要网关第四次发消息过来的时候才可以收到,接下去就每条都可以收到,我的MO监听代码和MT监听代码一样的,但是我改成在MT通道中监听网关消息就可以收到前三条网关消息我想请问这个是不是亚信网关的问题?不过我用模拟器配套的客户端就接收正常啊.我贴出MO监视代码,大家帮忙看看有什么错误,帮忙指正:
public void run()
{
try {
for ( ;; )
{
DataInputStream in = new DataInputStream( conn.sock.getInputStream() );
DataOutputStream out = new DataOutputStream( conn.sock.getOutputStream() ); Header header = new Header();
header.read( in ); //读取in,我在DEBUG的时候发现前面三次都没有读到东西 switch ( header.pk_cmd ) { case Const.CMPPE_DELIVER:
Deliver deliver = new Deliver();
deliver.execute( in, out, header )
break; case Const.CMPPE_ACTIVE:
Header respHeader = new Header();
respHeader.pk_cmd = Const.CMPPE_ACTIVE_RESP;
respHeader.pk_len += 1;
respHeader.pk_seq = header.pk_seq;
respHeader.send( out );
out.writeByte( 0 ); // reserved
moManager.lastActiveTest = System.currentTimeMillis();
break; case Const.CMPPE_ACTIVE_RESP:
in.readByte(); // reserved
moManager.lastActiveTest = System.currentTimeMillis();
break;
}
}
}
catch ( IOException ex ) {
ex.printStackTrace(); }
}
public void run()
{
try {
for ( ;; )
{
DataInputStream in = new DataInputStream( conn.sock.getInputStream() );
DataOutputStream out = new DataOutputStream( conn.sock.getOutputStream() ); Header header = new Header();
header.read( in ); //读取in,我在DEBUG的时候发现前面三次都没有读到东西 switch ( header.pk_cmd ) { case Const.CMPPE_DELIVER:
Deliver deliver = new Deliver();
deliver.execute( in, out, header )
break; case Const.CMPPE_ACTIVE:
Header respHeader = new Header();
respHeader.pk_cmd = Const.CMPPE_ACTIVE_RESP;
respHeader.pk_len += 1;
respHeader.pk_seq = header.pk_seq;
respHeader.send( out );
out.writeByte( 0 ); // reserved
moManager.lastActiveTest = System.currentTimeMillis();
break; case Const.CMPPE_ACTIVE_RESP:
in.readByte(); // reserved
moManager.lastActiveTest = System.currentTimeMillis();
break;
}
}
}
catch ( IOException ex ) {
ex.printStackTrace(); }
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货