return this.dataPack; }catch(Exception e){ e.printStackTrace(); System.out.println("[SMGP] makeActiveMsgPack.pack() error : "+e.getMessage()); return null; } } /**取得5.3.1active_test的消息包 * 5.3.7active_test **/ private byte[] makeActiveMsgPack(){ ByteArrayOutputStream byteArrayOutStream = new ByteArrayOutputStream(); DataOutputStream dataOutStream = new DataOutputStream(byteArrayOutStream); try{ //MT消息长度 this.PacketLength = 12; //打包MT消息报头 packHead(dataOutStream); //返回消息的字节流 dataPack = byteArrayOutStream.toByteArray(); return this.dataPack; }catch(Exception e){ e.printStackTrace(); System.out.println("[SMGP] makeActiveMsgPack.pack() error : "+e.getMessage()); return null; } } /**取得5.3.1exit的消息包 * 5.3.11exit **/ private byte[] makeExitMsgPack(){ ByteArrayOutputStream byteArrayOutStream = new ByteArrayOutputStream(); DataOutputStream dataOutStream = new DataOutputStream(byteArrayOutStream); try{ //MT消息长度 this.PacketLength = 12; //打包MT消息报头 packHead(dataOutStream); //返回消息的字节流 dataPack = byteArrayOutStream.toByteArray(); return this.dataPack; }catch(Exception e){ e.printStackTrace(); System.out.println("[SMGP] makeExitMsgPack.pack() error : "+e.getMessage()); return null; } } /** * 解吸接受到的数据包,转换成SMGP MSG * @param recvPack * @return */ public void parsePack(byte[] recvPack) throws Exception{ ByteArrayInputStream byteStream = new ByteArrayInputStream(recvPack); DataInputStream dataInStream = new DataInputStream(byteStream); //读取消息头 try { this.RequestID = dataInStream.readInt(); //消息类型 this.SequenceID = dataInStream.readInt(); //消息流水号(可以用来完成消息的确认) } catch(IOException e) { System.out.println("[SMGP] SMGP.parseHead() error : "+e); throw e; } //读取消息体 try{ switch(RequestID){ case SMGP.SMGP_LOGIN: break; case SMGP.SMGP_LOGIN_RESP: this.parseLoginRespPack(dataInStream); break; case SMGP.SMGP_DELIVER: break; case SMGP.SMGP_DELIVER_RESP: break; case SMGP.SMGP_SUBMIT: break; case SMGP.SMGP_SUBMIT_RESP: break; case SMGP.SMGP_ACTIVE_TEST: break; case SMGP.SMGP_ACTIVE_TEST_RESP: break; case SMGP.SMGP_QUERY: break; case SMGP.SMGP_QUERY_RESP: break; } } catch(Exception e){ throw e; } } /** * 解析login_resp信息包 * 5.3.2login_resp * @param dataInputStream */ private void parseLoginRespPack( DataInputStream dataInputStream ) throws Exception { try{ this.Status = dataInputStream.readInt(); this.AuthenticatorServer = this.readString(dataInputStream,16); this.Version = dataInputStream.readByte(); }catch(Exception e){ System.out.println("[SMGP]SMGP.parseConnectRespPack error " + e); throw e; } } /** * 解析submit_resp信息包 * 5.3.4submit_resp * @param dataInputStream */ private void parseSubmitRespPack( DataInputStream dataInputStream ) throws Exception { try{ this.MsgID = this.readString(dataInputStream,10); this.Status = dataInputStream.readInt(); }catch(Exception e){ System.out.println("[SMGP]SMGP.parseSubmitRespPack error " + e); throw e; } } /** * 解析deliver信息包 * 5.3.5deliver * @param dataInputStream */ private void parseDeliverPack( DataInputStream dataInputStream ) throws Exception { try{ this.MsgID = this.readString(dataInputStream,10); this.IsReport = dataInputStream.readByte(); this.MsgFormat = dataInputStream.readByte(); this.RecvTime = this.readString(dataInputStream,14); this.SrcTermID = this.readString(dataInputStream,21); this.DestTermID = this.readString(dataInputStream,21); this.MsgLength = dataInputStream.readByte(); //当为状态报告时候 if(IsReport == 1){// this.Report_ID = this.readString(dataInputStream,10);// this.Report_Submit_date = this.readString(dataInputStream,14);// this.Report_Done_date = this.readString(dataInputStream,14);// this.Report_Stat = this.readString(dataInputStream,7);// this.Report_Error = this.readString(dataInputStream,3); this.MsgContent = readDeliverString(dataInputStream,this.MsgLength,this.MsgFormat); } else{ //非状态报告,当字节数大于128时候 this.MsgContent = readDeliverString(dataInputStream,this.MsgLength,this.MsgFormat); } }catch(Exception e){ System.out.println("[SMGP]SMGP.parseDeliverPack error " + e); throw e; } } /** 生成序列号 **/ private static int fmo_number = 1; private synchronized static int getSequenceID() { int temp_SeqNo = fmo_number++; if (fmo_number >= 100000000) fmo_number = 1; return temp_SeqNo; } /** * 向数据输出流写入指定长度字符串,不足右补“\0” * @param dataOutStream 由调用者传送来的数据输出流 * @param str 写入的字符 * @param StrLen 指定长度 * @throws Exception */ private void writeString_old(DataOutputStream dataOutStream,String str,int StrLen) throws Exception { int i; try{ if(str!=null) { dataOutStream.writeBytes(str) ; System.out.println("str len = "+str.length()); for (i=1;i { dataOutStream.writeByte('\0'); } }else{ for (i=1;i { dataOutStream.writeByte('\0'); } } }catch(IOException e){ throw e; } } /** * 向数据输出流写入指定长度字符串,不足右补“\0” * @param dataOutStream 由调用者传送来的数据输出流 * @param str 写入的字符 * @param StrLen 指定长度 * @throws Exce **/ private void writeString(DataOutputStream dataOutStream,String str,int StrLen) throws Exception { if(str==null || str.length()==0){ for(int i=0;i dataOutStream.writeByte('\0'); } return; }// byte[] bytes = str.getBytes();// int theLength = Math.min(bytes.length,StrLen);// dataOutStream.write(bytes,0,theLength); int theLength = str.length() < StrLen ? str.length() : StrLen; dataOutStream.writeBytes(str.substring(0,theLength)); //不足部分补'\0' for(int i=0;i dataOutStream.writeByte('\0'); } } /** * 按长度,编码格式从字节流中读取指定长度的字符 * @param inStream :字节流 * @param StrLen :长度 * @param fmt :编码格式 * @return */ private static String readDeliverString(DataInputStream inStream, int StrLen, int fmt) { String result = ""; byte[] readByte = new byte[1000]; int i = 0; //判断字符串是否长于128位 if (StrLen < 0) { StrLen = 256 + StrLen; } try { while (true) { readByte[i] = inStream.readByte(); i++; if (i >= 1000) return ""; if (i > StrLen - 1) break; } } catch (IOException e) { return "readStringError->IOException"; } //按编码格式进行转码 try { if (fmt == 8) { result = new String(readByte, "UnicodeBigUnmarked"); } if (fmt == 0) { result = new String(readByte, 0, i); } if (fmt == 15) { result = new String(readByte, "gb2312"); } } catch (Exception e) { return "readStringError->FormatException"; } return result.trim(); } /** * 从流中读取一个字符串,返回的String 不包含'\0' */ private static String readString(DataInputStream inStream,int StrLen) { byte[] readByte = new byte[1000]; int i = 0; //当消息长度为大于(128时候) if(StrLen StrLen = 256 + StrLen; try{ while(true){ readByte[i] = inStream.readByte() ; i++; if (i>=1000) return ""; if(i > StrLen-1) break; } } catch(IOException e){ return "erro"; } String result = new String(readByte,0,i); return result.trim (); }}

中国电信 smgp java_smgp.java~1~ 源代码在线查看 - 中国电信小灵通短信平台SP端程序 资源下载 虫虫电子下载站...相关推荐

  1. 编写frame.java_returnordersubmitframe.java~83~ 源代码在线查看 - 用java编写的进销存系统 资源下载 虫虫电子下载站...

    //设置窗口类的字体和为按钮加入动作接收器的方法 public void setupFontAndListener(){ Component[] components = contentPane.ge ...

  2. 在线matlab怎么看图像,matlab.txt 源代码在线查看 - 关于matlab的图形图像识别的使用命令 资源下载 虫虫电子下载站...

    sparse 常规矩阵转换为稀疏矩阵 full 稀疏矩阵转换为常规矩阵 spconvert 由外部格式引入稀疏矩阵 >>>12.3处理非零元素issparse 判断元素是否为稀疏矩阵 ...

  3. Android 源代码在线查看 目录结构 不完全指南

    Android 源代码在线查看网站 在 Android sudio 中,想要查看一个 Android 系统的源代码,仅仅需要 Ctrl+鼠标左键 点击该目标类和方法名,即可在开发软件Android s ...

  4. android 源代码在线查看和索引

    android 源代码在线查看和索引 原文转载:http://androidsource.top/ 点击打开链接 近期发现该网址已经无法找到  可切换这个地址:http://grepcode.com/ ...

  5. 十分好用的Android源代码在线查看网站

    十分好用的Android源代码在线查看网站 http://androidxref.com/9.0.0_r3/

  6. JAVA怎么对接第三方短信平台?短信验证码完整API文档

    验证码短信平台的应用场景,一般包括用户注册.登陆账号.忘记密码.登录异常.支付确认等. 一.用户注册 通常我们会在注册时会用到短信验证码,即用户在网站或软件上注册账号时,企业需要通过验证码确认用户身份 ...

  7. java毕业设计融呗智慧金融微资讯移动平台服务端源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计融呗智慧金融微资讯移动平台服务端源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计融呗智慧金融微资讯移动平台服务端源码+lw文档+mybatis+系统+my ...

  8. Java实现发送短信的例子 - 使用【SMS短信平台】

    转自: https://blog.csdn.net/qq_26641781/article/details/78134241 我这里用到的是中国网建提供的SMS短信平台,在实现发送短信之前,需要在SM ...

  9. java语言阅信短信平台,阅信短信平台关于酒店管理的解决方案

    酒店行业具备客户密集,竞争激烈,服务要求高的特点,服务质量是客户主要关注的因素.阅信短信平台为酒店的管理者提供了信息化平台,使酒店管理者可以更加简洁高效地为客户服务,在低成本地投入下完成了现有客户服务 ...

  10. java at 短信_让老手机变成短信平台-AT指令的应用

    以NOKIA8250为例.通过8250的红外与PC连接之后,会产生一个虚拟串口,这个串口的序号可能在每台电脑上都不一样.利用这个串口,就可以对手机进行一系列操作,包括发送.接收短信.通过程序操作串口, ...

最新文章

  1. python常用命令大全-Python pip 常用命令汇总
  2. join orcl的left_Oracle关联查询关于left/right join的那点事
  3. srs代码学习(2)- 线程模型
  4. mysql读写分离 同步_MySQL数据库的同步配置+MySql读写分离
  5. Python多种方法实现句子中单词倒置(好未来2017笔试题)
  6. Tcl/tk glob nocomplain source
  7. 使用nohup让程序在远程主机后台运行
  8. python基础刻意练习--Task 7 文件与文件系统
  9. gps高斯utm_UTM坐标系统与高斯
  10. utc时间 单位换算_国际时间换算
  11. 我国计算机网络事业发展,我国计算机网络事业发展很快。据中国互联网络中心的一项统计显示【逻辑判断】...
  12. 京东AI:用于视觉识别的上下文Transformer网络-Contextual Transformer Networks for Visual Recognition
  13. java contains 大小写_用.contains方法忽略大小写的选项?
  14. 某大型软件公司售前软件工程师面试题附答案
  15. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV
  16. (学习笔记)PCL点云库的基本使用
  17. 收单外包机构备案业务类型汇总分析
  18. vue-seamless-scroll公告组件的使用
  19. 真的是神坑啊,Eureka服务无法注册的问题
  20. SpringBoot2核心技术最好的一篇文章——2. 核心技术

热门文章

  1. android自定义rx库,Android下载库(OkHttp3+Retrofit2+RxJava2)
  2. mariadb BSL协议期限
  3. 一本笔记,看懂《未来简史》!
  4. 计算机毕业论文房地产营销,万科集团四季花城房地产营销策略研究(毕业论文)...
  5. Activity初窥门径
  6. 交换机常用功能配置案例总结
  7. 电脑装windows和安卓双系统引导_Remix mini安卓电脑,玩的不只是Windows那张皮
  8. [Other]规范的邮件签名格式及HTML代码
  9. Webpack Chunk 分包规则
  10. 豆瓣电影喜剧榜数据爬取