⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmpp_hw.java

📁 短信cmpp2.0源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                byte[] send = new byte[9];                System.arraycopy(Tools.long2byte(resp.nMsgId),0,send,0,8);                send[8]=(byte)resp.nResult;                try {                    sendPacket(resp,send);                }                catch (IOException ex) {                    throw ex;                }                back.stat=stat;                backMsg=back;                break;            case COMMAND_CMPP_SUBMIT_RESP:                CMPPSubmitMessageResp sResp = new CMPPSubmitMessageResp();                if(msg==null) stat=SUBMIT_MSG_NULL_ERROR;                else{                    try {                        byte id[]= new byte[8];                        System.arraycopy(msg,0,id,0,8);                        sResp.setMsgID(id);                        sResp.nResult= msg[8];                        stat=msg[8];                    }                    catch (Exception ex) {                        stat=SUBMIT_MSG_FORMAT_ERROR;                    }                }                sResp.stat=stat;                backMsg=sResp;                break;            case COMMAND_CMPP_ACTIVE_TEST:                CMPPActiveTestMessageResp respMsg=new CMPPActiveTestMessageResp();                respMsg.nSequenceID=head.nSequenceID;                try {                    sendHead(respMsg);                }                catch (IOException ex) {                    throw ex;                }                break;            case COMMAND_CMPP_ACTIVE_TEST_REP:                break;            case COMMAND_CMPP_TERMINATE:                CMPPHead out= new CMPPHead();                out.nMsgSize=12;                out.nCommandID=COMMAND_CMPP_TERMINATE_RESP;                out.nSequenceID=head.nSequenceID;                try {                    sendHead(out);                }                catch (IOException ex) {                    throw ex;                }                break;            case COMMAND_CMPP_TERMINATE_RESP:                break;            default:                stat=CMPP_UNKNOWN_PACKAGE_ERROR;        }        backMsg.nCommandID=head.nCommandID;        backMsg.nMsgSize=head.nMsgSize;        backMsg.nSequenceID=head.nSequenceID;        backMsg.stat=stat;        return backMsg;    }    //收取网关下发信息    public void deliver()throws IOException{        try {            if(!activeTest("auto"))                throw new IOException();            CMPPHead back = Deliver();            if(back.nCommandID==this.COMMAND_CMPP_DELIVER){                deliverMsgList.addElement(((CMPPDeliverMessage)back).getDeliverMsg());                return;            }            if(back.nCommandID==this.COMMAND_CMPP_TERMINATE){                close();                throw new IOException();            }            if(back.stat==DELIVER_MSG_TIME_OUT){                return;            }        }        catch (IOException ex) {            close();            throw ex;        }    }    private CMPPHead Deliver()throws IOException{        CMPPHead head = new CMPPHead();        byte[] bMsg=null;        int i=0;        while(true){            try {                bMsg=read(head);            }            catch (InterruptedIOException ex) {                if(i==2){                    head.stat=DELIVER_MSG_TIME_OUT;//由于没有消息而退出--stat=1                    break;                }else{                    i++;                     continue;                }            }            catch (IOException ex) {                throw ex;            }            try {                head = dealMsg(head,bMsg);            }            catch(IOException ex){                throw ex;            }            catch (Exception ex) {                Log.printBytes(bMsg,logFile);                Log.printError(ex,"",logFile);            }            if(head.nCommandID==this.COMMAND_CMPP_ACTIVE_TEST){//||head.nCommandID==this.COMMAND_CMPP_NACK_RESP){                continue;            }            break;        }        return head;    }    //向网关查询信息流量    public CMPPQueryMessageResp Query(){        CMPPQueryMessage queryMessage = new CMPPQueryMessage();        CMPPQueryMessageResp queryResp = new CMPPQueryMessageResp();        return queryResp;    }    //发送测试信息    private boolean activeTest(String flag)throws IOException{        boolean testFlag=false;        if(flag==null||(int)(System.currentTimeMillis()/1000)-checkTime>10)            testFlag=true;        if(testFlag){            CMPPActiveTestMessage test = new CMPPActiveTestMessage();            activeNum=test.setSequenceID(activeNum);            test.nMsgSize=12;            try {                sendHead(test);            }            catch(IOException e){                activeNum--;                return false;            }            try {                while(true){                    CMPPHead back = Deliver();                    if(back.nCommandID==this.COMMAND_CMPP_DELIVER){                        deliverMsgList.addElement(((CMPPDeliverMessage)back).getDeliverMsg());                        continue;                    }                    if(back.stat==this.DELIVER_MSG_TIME_OUT){                        throw new IOException();                    }                    if(back.nCommandID==this.COMMAND_CMPP_ACTIVE_TEST_REP){                        checkTime=(int)(System.currentTimeMillis()/1000);                        break;                    }                }            }            catch (IOException ex) {                return false;            }            return true;        }        return true;    }    public boolean activeTest()throws IOException{        return activeTest(null);    }    private int getDeliverMessage(CMPPDeliverMessage msg,byte[] content)throws Exception{        if(msg==null)            return DELIVER_MSG_NULL_ERROR;        int stat=CMPP_SUCCESS;        //把content解析成所需信息        byte msgID[] = new byte[8];        byte sDestTermID[] = new byte[21];        byte sServiceID[] = new byte[10];        byte cTpPid=0;        byte cTpUdhi=0;        byte nMsgFormat=0;        byte sSrcTermID[] = new byte[21];        byte nIsReply=0;        byte nMsgLen=0;        byte sMsgContent[]=null;        try {            System.arraycopy(content,0,msgID,0,8);            System.arraycopy(content,8,sDestTermID,0,21);            System.arraycopy(content,29,sServiceID,0,10);            cTpPid = content[39];            cTpUdhi = content[40];            nMsgFormat = content[41];            System.arraycopy(content,42,sSrcTermID,0,21);            nIsReply = content[63];            nMsgLen = content[64];            if(nMsgLen< 0)                nMsgLen += 256;            sMsgContent= new byte[nMsgLen];            System.arraycopy(content,65,sMsgContent,0,nMsgLen);        }        catch (Exception ex) {            return DELIVER_MSG_FORMAT_ERROR;        }        /////////////////////////////////////////封装正常消息        msg.setMsgID(msgID);        msg.msgID=Tools.byte2long(msgID);        msg.nIsDelivery=nIsReply;        msg.nMsgFormat=nMsgFormat;        msg.nMsgLength=nMsgLen;        msg.nTPpid=cTpPid;        msg.nTPudhi=cTpUdhi;        msg.sDestId=new String(sDestTermID).trim();        msg.sServiceId=new String(sServiceID).trim();        msg.sSrcTerminalId=new String(sSrcTermID).trim();        try {            if(nIsReply==0){                if(nMsgFormat == 8){//ucs2编码格式                    msg.sMsgContent = new String(sMsgContent,"iso-10646-ucs-2");                }else{                    msg.sMsgContent=new String(sMsgContent,"gb2312");                }            }        }        catch (Exception ex) {            return DELIVER_MSG_FORMAT_DECODE_ERROR;        }        /////////////////////////////状态报告中所需字段        if(nIsReply==1){            try {                byte msgReportID[]=new byte[8];                System.arraycopy(sMsgContent,0,msgReportID,0,8);                msg.setReportMsgId(msgReportID);                //msg.nReportMsgId=Tools.byte2long(sMsgContent,0);                msg.sStat=new String(sMsgContent,8,7).trim();                msg.sSubmitTime=new String(sMsgContent,15,10).trim();                msg.sDoneTime=new String(sMsgContent,25,10).trim();                msg.sDestTerminalId=new String(sMsgContent,35,21).trim();                msg.nSMSCSequence=Tools.byte2int(sMsgContent,56);            }            catch (Exception ex) {                stat=DELIVER_MSG_FORMAT_REPORT_ERROR;            }        }        return stat;    }    private void sendHead(CMPPHead head)throws IOException{        byte[] send = new byte[12];        System.arraycopy(Tools.int2byte(head.nMsgSize),0,send,0,4);        System.arraycopy(Tools.int2byte(head.nCommandID),0,send,4,4);        System.arraycopy(Tools.int2byte(head.nSequenceID),0,send,8,4);        send(send);    }    private void sendPacket(CMPPHead head,byte[] msg)throws IOException{        byte[] send = new byte[12+msg.length];        head.nMsgSize=12+msg.length;        System.arraycopy(Tools.int2byte(head.nMsgSize),0,send,0,4);        System.arraycopy(Tools.int2byte(head.nCommandID),0,send,4,4);        System.arraycopy(Tools.int2byte(head.nSequenceID),0,send,8,4);        System.arraycopy(msg,0,send,12,msg.length);        send(send);    }    private void send(byte[] msg)throws IOException{        DataOutputStream out = creatOutputStream();        out.write(msg);        out.flush();    }    private byte[] read(CMPPHead head)throws InterruptedIOException,IOException{        DataInputStream in =creatInputStream();        head.nMsgSize=in.readInt();        head.nCommandID=in.readInt();        head.nSequenceID=in.readInt();        byte[] resp = null;        if(head.nMsgSize<=12){            return null;        }else{            resp=new byte[head.nMsgSize-12];            in.read(resp,0,head.nMsgSize-12);        }        return resp;    }    private DataInputStream creatInputStream()throws IOException{        return new DataInputStream(s.getInputStream());    }    private DataOutputStream creatOutputStream()throws IOException{        return new DataOutputStream(s.getOutputStream());    }    public void close(){        spm.freeSocket();        s=null;    }    private static final int CMPP_SUCCESS=0;    private static final int CMPP_UNKNOWN_PACKAGE_ERROR=-9;    private static final int CMPP_LOGOUT_HAPPEND=-2;    private static final int SUBMIT_MSG_NULL_ERROR=-4;    private static final int SUBMIT_MSG_FORMAT_ERROR=-5;    private static final int SUBMIT_MSG_TIME_OUT=-6;    private static final int DELIVER_MSG_FORMAT_REPORT_ERROR=-7;    private static final int DELIVER_MSG_NULL_ERROR=-8;    private static final int DELIVER_MSG_TIME_OUT=-9;    private static final int DELIVER_MSG_FORMAT_ERROR=-10;    private static final int DELIVER_MSG_FORMAT_DECODE_ERROR=-11;    private static final int CONNECT_MSG_NULL_ERROR=-12;    private static final int CONNECT_MSG_RESP_NOT_FOUNT_ERROR=-13;    private static final int CONNECT_MSG_FORMAT_ERROR=-14;    private static final int CONNECT_INIT_ERROR=-15;    private static final int CONNECT_HEAD_LEN = 12;    private static final int CONNECT_PACKET_LEN = 27;    private static final int QUERY_PACKET_LEN = 27;    private static final int COMMAND_CMPP_SUBMIT = 4;    private static final int COMMAND_CMPP_QUERY = 6;    private static final int COMMAND_CMPP_TERMINATE = 2;    private static final int COMMAND_CMPP_TERMINATE_RESP = 0x80000002;    private static final int COMMAND_CMPP_QUERY_RESP = 0x80000006;    private static final int COMMAND_CMPP_SUBMIT_RESP = 0x80000004;    private static final int COMMAND_CMPP_CONNECT = 1;    private static final int COMMAND_CMPP_CONNECT_RESP = 0x80000001;    private static final int COMMAND_CMPP_ACTIVE_TEST = 8;    private static final int COMMAND_CMPP_ACTIVE_TEST_REP = 0x80000008;    private static final int COMMAND_CMPP_DELIVER = 5;    private static final int COMMAND_CMPP_NACK_RESP = 0x80000000;    private static final int COMMAND_CMPP_DELIVER_RESP = 0x80000005;    private static final int COMMAND_CMPP_SET_KEY = 4098;    private static final int COMMAND_CMPP_SET_KEY_RESP = 0x80001002;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -